我有MenuItems的Visibility
属性由转换器控制。 MenuItems通常具有相同的可视性逻辑(相同的转换器,相同的参数)。为了避免重新输入,我想将它们虚拟在一起,只设置一次可见性。如何将WPF ContextMenu中的MenuItem分组而不嵌套它们?
我知道我可以通过嵌套MenuItems来实现。有另一种方法吗?
我有MenuItems的Visibility
属性由转换器控制。 MenuItems通常具有相同的可视性逻辑(相同的转换器,相同的参数)。为了避免重新输入,我想将它们虚拟在一起,只设置一次可见性。如何将WPF ContextMenu中的MenuItem分组而不嵌套它们?
我知道我可以通过嵌套MenuItems来实现。有另一种方法吗?
我不太清楚你想做什么,但我怀疑风格会很方便。我会举一个例子。在这里我创建了一个有上下文菜单的网格按钮。在Button的资源中,我为MenuItems创建了一个样式(没有命名)。在样式中,您可以通过替换我创建的绑定来指定可见性应该如何表现。
<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>
这将改变所有MenuItems的可见性。我只想改变分享其可见性状态的MenuItems。 – mamuesstack 2013-03-22 10:53:11
够公平的。你如何单独应用该风格而不是风格影响所有MenuItems?还是我仍然误解了这个问题? – 2013-03-22 13:59:16
我认为如果我想要避免属性,这就是要走的路。我更新了你的代码片段。谢谢 – mamuesstack 2013-03-25 07:43:40
将它们绑定到一个propery。一旦财产发生变化,他们都会得到更新。 – 2013-03-22 10:07:22
好点!实际上,我希望只有XAML解决方案 – mamuesstack 2013-03-22 10:50:25
XAML只是一个不知道ViewModel的附加属性。如果您不想使用ViewModel中的属性,请将MenuItems绑定到依赖属性。 – 2013-03-22 20:19:58