【问题标题】:Get focused MenuItem in submenu WPF在子菜单 WPF 中获取焦点 MenuItem
【发布时间】:2013-03-13 01:23:40
【问题描述】:

我正在编写一个包含子菜单的菜单应用程序。我还有一个状态栏,当用户使用键盘在菜单中导航时,我想在其中显示有关集中的 MenuItem 的信息。 我尝试处理来自每个 MenuItem 的 GotFocus 事件并将 StatusBar 的内容更改为发件人的标签,但它仅适用于 MenuItem 1,不适用于 1.1 和 2.2。

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;
}

如何显示有关子菜单重点项目的信息?也许还有其他方法可以做到这一点?

谢谢,亚历山大。

【问题讨论】:

  • 以下有帮助吗?

标签: wpf menu keyboard focus


【解决方案1】:

不确定它是否适用于您所需要的,但我认为这正是您所需要的......

绑定到视图模型总是最好的 - 然后你可以通过简单地绑定到它来在其他地方公开那个“状态”......

如果是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,用于样式。

【讨论】:

    猜你喜欢
    • 2016-02-29
    • 2011-05-25
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多