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

4

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

我知道我可以通过嵌套菜单项来实现这个目的。还有其他方法吗?


将它们绑定到一个属性上。一旦属性更改,它们全部会被更新。 - snowy hedgehog
好的,说得好!实际上,我希望有一个仅限于XAML的解决方案。 - mamuesstack
1
XAML只是一个附加属性,不知道ViewModel的存在。如果您不想使用ViewModel中的属性,请将MenuItems绑定到附加依赖属性。 - snowy hedgehog
1个回答

2

我不太清楚您想要做什么,但我猜测样式会很有用。我会举个例子。在这里,我创建了一个带有上下文菜单的网格按钮。在按钮的资源中,我创建了一个未命名的菜单项样式。在样式中,您可以通过替换我创建的绑定来指定可见性应该如何行为。

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

1
那会改变所有菜单项的可见性。我只想改变共享其可见状态的菜单项。 - mamuesstack
好的。你觉得单独应用这个样式怎么样,而不是让它影响所有的菜单项呢?或者我还是误解了问题? - Paymahn Moghadasian
如果我想避免使用属性,我认为这是一个可行的方法。我更新了你的代码片段。谢谢。 - mamuesstack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接