如何在WPF ContextMenu中对MenuItem进行分组而不嵌套它们?

时间:2013-03-22 09:23:01

标签: wpf wpf-controls

我有一个MenuItems,其Visibility属性由转换器控制。大多数情况下,MenuItems具有相同的可见性逻辑(相同的转换器,相同的参数)。为了避免重新输入,我想将它们虚拟地组合在一起,只设置一次可见性。

我知道我可以通过嵌套MenuItem来实现这一点。还有另一种方式吗?

1 个答案:

答案 0 :(得分:2)

我不太清楚你想做什么,但我怀疑一种风格会很方便。我举个例子。在这里,我在网格中创建一个具有上下文菜单的按钮。在Button的资源中,我为MenuItems创建了一个样式(未命名)。在样式中,您可以通过替换我创建的Binding来指定visibilty的行为方式。

<Window x:Class="StackOverflow.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Button Content="Testing" VerticalAlignment="Center" HorizontalAlignment="Center">
            <Button.Resources>
                <Style TargetType="{x:Type MenuItem}">
                    <Setter Property="Visibility" Value="{Binding SomeBinding, Converter=SomeConverter}"/>
                </Style>
            </Button.Resources>
            <Button.ContextMenu>
                <ContextMenu>
                    <MenuItem Header="1"/>
                    <MenuItem Header="2"/>
                    <MenuItem Header="3"/>
                    <MenuItem Header="4"/>
                </ContextMenu>
            </Button.ContextMenu>
        </Button>
    </Grid>
</Window>