2

我正在编写一个包含子菜单的菜单应用程序。我还有一个状态栏,当用户使用键盘在菜单中导航时,我想在其中显示有关重点菜单项的信息。我尝试处理来自每个 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;
}

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

谢谢,亚历山大。

4

1 回答 1

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>

PushBindingManager您可以从上面文章中的链接xmlns:pb="clr-namespace:PushBindingExtension;assembly=some-assembly"

你应该准备好了。只需IsFocused在您的视图模型中制作,将菜单绑定到它 - 然后将任何项目is focused置于状态。这里需要一些“腿部工作”来实现这一点,但非常少。

希望这可以帮助

注意:使用其他链接进行下载(即http://dl.dropbox.com/u/39657172/Blog/PushBindingInStyleDemo.zip
(该链接包含StylePushBindings您需要的样式。

于 2013-03-12T17:09:13.213 回答