2014-03-19 41 views
0

我試着去恢復,我點擊菜單項的名字,我總是會返回一個空字符串:廣東話恢復菜單項的名稱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。 我如何知道用戶點擊了哪個menuItem?

在此先感謝您的幫助。要獲得點擊MenuItemsender參數,而不是

+0

步驟通過看什麼類型的e.OriginalSource實際上是。我想你可能不會把正確的東西投射到MenuItem上。 – jamesthollowell

回答

0

嘗試,做類型轉換如下:

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

鑄造的這種方式會拋出異常,如果你投的,而不是返回null錯了對象,喜歡它的對應物(... As MenuItem )。如果你有錯誤的類型轉換問題,這將清楚表明。

UPDATE:

我覺得你有空字符串ss因爲你設置的MenuItemName財產,至少我不能看到,在發佈的代碼。如果你想在MenuItem顯示的字符串,你可以嘗試,而不是這樣:

MenuItem menu4 = (MenuItem)sender; 
var xml = (XmlElement)menu4.DataContext; 
var es = xml.Attribute["es"].Value; 
+0

感謝您的回答。這是一樣的結果。它不是空的。當我將鼠標移動到menu4上時,它會報告:{System.Windows.Controls.MenuItem Header:System.Xml.XmlElement Items.Count:0} – user2367101

+0

@ user2367101更新了我的答案。我看不到你設置'Name'屬性的位置,所以我猜你想要其他的:'MenuItem'中顯示的文本可能是? – har07

+0

是的,我想要那個文本或東西來標識點擊的項目。任何東西。我使用XML文件。我有這樣的代碼: user2367101