Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WPF Generated files won't compile

In my WPF application I add click event handler for context menu item (context menu for ListBoxItem).

When I try following approach:

            <ListBox.ItemContainerStyle>
                <Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}">
                    <Setter Property="ContextMenu">
                        <Setter.Value>
                            <ContextMenu>
                                <MenuItem Header="Remove" Click="RemoveSelectedSchedule"/>
                            </ContextMenu>
                        </Setter.Value>
                    </Setter>
                    <EventSetter Event="MouseDoubleClick" Handler="ScheduleList_MouseDoubleClick"/>
                </Style>
            </ListBox.ItemContainerStyle>

and try to build, build fails with following error messages:

1>C:\Users\Pawel\Source\Repos\academiccalendar\AcademicCalendar.Desktop\obj\Debug\MainWindow.g.cs(113,14,113,15): error CS1513: } expected 1>C:\Users\Pawel\Source\Repos\academiccalendar\AcademicCalendar.Desktop\obj\Debug\MainWindow.g.cs(123,19,123,20): error CS1514: { expected 1>C:\Users\Pawel\Source\Repos\academiccalendar\AcademicCalendar.Desktop\obj\Debug\MainWindow.g.cs(125,9,125,10): error CS1525: Invalid expression term '}' 1>C:\Users\Pawel\Source\Repos\academiccalendar\AcademicCalendar.Desktop\obj\Debug\MainWindow.g.cs(125,10,125,11): error CS1002: ; expected

However, if setting Click event handler is removed for Context MenuItem, code compiles and runs properly.

EDIt Event handler is currently left empty.

void RemoveSelectedSchedule(object sender, RoutedEventArgs e)
    {

    }
like image 786
pkupidura Avatar asked Mar 08 '26 17:03

pkupidura


1 Answers

This is bizarre...

After some playing I got it to compile

  1. Remove the code

            <Setter Property="ContextMenu">
                <Setter.Value>
                    <ContextMenu>
                        <MenuItem Header="Remove" Click="RemoveSelectedSchedule"/>
                    </ContextMenu>
                </Setter.Value>
            </Setter>
    
  2. Compile - Fails

  3. Add A Second EventSetter

  4. Compile Fails

  5. Add back the code

            <Setter Property="ContextMenu">
                <Setter.Value>
                    <ContextMenu>
                        <MenuItem Header="Remove" Click="RemoveSelectedSchedule"/>
                    </ContextMenu>
                </Setter.Value>
            </Setter>
    
  6. Compile again - Compiles!!!

Something wrong with the WPF compiler ...

Edit 1 Better Answer...

If you move the ContextMenu to the resources section

<ContextMenu x:Key="ListBoxItemContextMenu">
            <MenuItem Header="View" Name="MenuItemView" Click="ContextClicked"/>
        </ContextMenu>

And access it in the Setter it seems to work

<Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}">
                            <Setter Property="ContextMenu" Value="{StaticResource ListBoxItemContextMenu}">
                            </Setter>
                            <EventSetter Event="MouseDown" Handler="EventSetter_OnHandler1"></EventSetter>
                            <EventSetter Event="MouseDoubleClick" Handler="EventSetter_OnHandler2"></EventSetter>
                        </Style> 
like image 120
Bill Campbell Avatar answered Mar 10 '26 06:03

Bill Campbell