2013-03-12 69 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,对于风格