2013-03-12 44 views
2

我正在用包含子菜單的菜單編寫應用程序。此外,我還有一個StatusBar,當用戶在帶鍵盤的菜單中導航時,我想顯示有關集中MenuItem的信息。 我試圖從每個MenuItem處理GotFocus事件,並將StatusBar的內容更改爲發件人標籤,但它僅適用於MenuItem 1,而不適用於1.1和2.2。在子菜單中獲取專注的MenuItem WPF

XAML:

<Menu Height="23" x:Name="mainMenu"> 
    <MenuItem Header="Header1" Tag="Info1" GotFocus="MenuItem_GotFocus_1"> 
     <MenuItem Header="Header1.1" Tag="Info1.1" GotFocus="MenuItem_GotFocus_1"/> 
     <MenuItem Header="Header1.2" Tag="Info1.1" GotFocus="MenuItem_GotFocus_1"/> 
     ... 
    </MenuItem> 
    ... 
</Menu> 

C#:

private void MenuItem_GotFocus_1(object sender, RoutedEventArgs e) 
{ 
    statusBarItem.Content = (sender as FrameworkElement).Tag; 
} 

我怎樣才能顯示有關子菜單的關注項目的信息?也許還有其他方法可以做到嗎?

謝謝,亞歷山大。

+0

沒有任何的幫助之下? – NSGaga 2013-03-26 17:11:06

回答

0

它是否適用於你需要究竟是什麼,但我認爲這是你需要什麼不知道......

它總是最好綁定到視圖模型 - 然後你可以在其他一些暴露的是「狀態」通過簡單地綁定到它...

IsFocused的情況下(如果你在談論標準的WPF菜單項)有一個小問題綁定到它,因爲它是一個只讀的綁定失敗,像
http://meleak.wordpress.com/2011/08/28/onewaytosource-binding-for-readonly-dependency-property/
(這也是這種解決方案的一個很好的例子,類似於ActiveWidth/Height)

<TreeView.ItemContainerStyle> 
<Style TargetType="{x:Type TreeViewItem}"> 
    <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" /> 
    <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" /> 
    <Setter Property="pb:PushBindingManager.StylePushBindings"> 
      <Setter.Value> 
    <pb:PushBindingCollection> 
    <pb:PushBinding TargetProperty="IsFocused" Path="IsFocused"/> 
    </pb:PushBindingCollection> 
      </Setter.Value> 
    </Setter> 

您可以下載該項目/ lib目錄,以支持從上述文章中的鏈接(PushBindingManager) 把下面的xmlns:pb="clr-namespace:PushBindingExtension;assembly=some-assembly"(我把它複製,集成,因此我沒有確切來源/命名這裏)。

你應該開始。只需在您的視圖模型中創建IsFocused,將菜單綁定到它 - 然後將該狀態下的任何項目is focused貼上。這裏需要一些「腿部工作」來實現這個目標,但是很少。

希望這有助於

注意:使用其他鏈接進行下載(即http://dl.dropbox.com/u/39657172/Blog/PushBindingInStyleDemo.zip
(即一個包含你所需要的StylePushBindings,對於風格

相關問題