Не могу восстановить имя элемента меню, щелкнувшего в XAML

Я пытаюсь восстановить имя элемента меню, где я щелкнул, и он всегда возвращает пустую строку:

    private void MenuP_Click(object sender, RoutedEventArgs e)
    {
        MenuItem menu4 = e.OriginalSource as MenuItem;
        string ss = menu4.Name;         /// always empty. why?             
    } 

XAML:

Window.Resources>
    <Style x:Key="ItemStyle" TargetType="MenuItem">
        <EventSetter Event="MenuItem.Click" Handler="MenuP_Click"></EventSetter>
    </Style>
    <Style x:Key="CatStyle">
        <Setter Property="MenuItem.ItemsSource" Value="{Binding XPath=submenu}"/>
        <Setter Property="MenuItem.DisplayMemberPath" Value="@es"></Setter>
        <Setter Property="MenuItem.ItemContainerStyle" Value="{StaticResource ItemStyle}"></Setter>
    </Style>
</Window.Resources>
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="120"/> <ColumnDefinition Width="677*"/> 
    </Grid.ColumnDefinitions>

    <Menu Name="MenuP" VerticalAlignment="Top" ItemsSource="{Binding Source={StaticResource datos}, XPath=//menues/Menux}" DisplayMemberPath="@es" ItemContainerStyle="{StaticResource CatStyle}">

 </Grid>

menuitems.count всегда тоже равен 0. Как я могу узнать, по какому пункту меню щелкнул пользователь?

Заранее спасибо за помощь.

1 ответ

Попробуй кликнуть MenuItem от sender параметр вместо этого, и приведите приведение типа следующим образом:

MenuItem menu4 = (MenuItem)sender;
string ss = menu4.Name;

Этот способ приведения вызовет исключение, если вы приведете не тот объект вместо возврата null как это коллега (... As MenuItem). Это прояснит ситуацию, если у вас возникли проблемы с приведением типов.

ОБНОВИТЬ:

Я думаю, что вы получили пустую строку в ss потому что вы никогда не устанавливаете Name собственностью MenuItemПо крайней мере, я не вижу этого в опубликованном коде. Если вы хотите, чтобы строка отображалась в MenuItem Вы можете попробовать этот способ вместо этого:

MenuItem menu4 = (MenuItem)sender;
var xml = (XmlElement)menu4.DataContext;
var es = xml.Attribute["es"].Value;
Другие вопросы по тегам