martinrhan
martinrhan

Reputation: 493

WPF MenuItem Click event called two times instead of one time

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

Answers (1)

Rekshino
Rekshino

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

Related Questions