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)
{
}
This is bizarre...
After some playing I got it to compile
Remove the code
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem Header="Remove" Click="RemoveSelectedSchedule"/>
</ContextMenu>
</Setter.Value>
</Setter>
Compile - Fails
Add A Second EventSetter
Compile Fails
Add back the code
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem Header="Remove" Click="RemoveSelectedSchedule"/>
</ContextMenu>
</Setter.Value>
</Setter>
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>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With