0

我正在尝试恢复单击的菜单项的名称,但它始终返回一个空字符串:

    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。我怎么知道用户点击了哪个 menuItem?

4

1 回答 1

0

尝试MenuItemsender参数中单击,并按如下方式进行类型转换:

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;
于 2014-03-19T04:05:21.090 回答