Reputation: 493
I have a Menu
in my XAML that look like this
<Menu DockPanel.Dock="Top" Height="20">
<MenuItem Width="20" Height="20" x:Name="MenuItem_AddNewQuality">
<MenuItem.Resources>
<Style TargetType="MenuItem">
<EventSetter Event="Click" Handler="MenuItem_AddNewQuality_Click"></EventSetter>
</Style>
</MenuItem.Resources>
<MenuItem.Background>
<ImageBrush ImageSource="icons8-add-50.png"/>
</MenuItem.Background>
<ItemsControl.ItemTemplateSelector>
<local:DataTemplateSelector_MenuItem_AddNewQuality_SelectType>
<local:DataTemplateSelector_MenuItem_AddNewQuality_SelectType.DataTemplate_Enabled>
<DataTemplate>
<TextBlock Text="{Binding Name}"></TextBlock>
</DataTemplate>
</local:DataTemplateSelector_MenuItem_AddNewQuality_SelectType.DataTemplate_Enabled>
<local:DataTemplateSelector_MenuItem_AddNewQuality_SelectType.DataTemplate_Disenabled>
<DataTemplate>
<TextBlock Text="{Binding Name}" IsEnabled="False"></TextBlock>
</DataTemplate>
</local:DataTemplateSelector_MenuItem_AddNewQuality_SelectType.DataTemplate_Disenabled>
</local:DataTemplateSelector_MenuItem_AddNewQuality_SelectType>
</ItemsControl.ItemTemplateSelector>
</MenuItem>
<MenuItem Width="20" Click="Button_RemoveSelectedQuality_Click" IsEnabled="{Binding HasItemSelectedandSelectedItemHasQuality, ElementName=window, Mode=OneWay}" Height="20">
<MenuItem.Background>
<ImageBrush ImageSource="icons8-delete-bin-50.png"/>
</MenuItem.Background>
</MenuItem>
</Menu>
However the MenuItem_AddNewQuality_Click()
was executed two times.
Then I tried to remove
<EventSetter Event="Click" Handler="MenuItem_AddNewQuality_Click"></EventSetter>
But this time there are no thing executed. So can any one please tell me what's wrong with it?
Upvotes: 2
Views: 478
Reputation: 7325
If you set in your event handler, that event was handled, then you will get it called only one time:
private void MenuItem_AddNewQuality_Click(object sender, RoutedEventArgs e)
{
//....
e.Handled = true;
}
Another way would be set Click
event not as implicit style for all nested menu items(this is what you have with double call), but explicitly in MenuItem
:
<MenuItem Width="20" Height="20" x:Name="MenuItem_AddNewQuality" Click="MenuItem_AddNewQuality_Click">
Another way is to declare an explicit style and apply it to the MenuItem
:
<Style x:Key="MenItemStyle" TargetType="MenuItem">
<EventSetter Event="Click" Handler="MenuItem_AddNewQuality_Click"/>
</Style>
<MenuItem Style="{StaticResource ResourceKey=MenItemStyle}">
Upvotes: 1