2013-03-22 88 views
3

我有MenuItems的Visibility属性由转换器控制。 MenuItems通常具有相同的可视性逻辑(相同的转换器,相同的参数)。为了避免重新输入,我想将它们虚拟在一起,只设置一次可见性。如何将WPF ContextMenu中的MenuItem分组而不嵌套它们?

我知道我可以通过嵌套MenuItems来实现。有另一种方法吗?

+0

将它们绑定到一个propery。一旦财产发生变化,他们都会得到更新。 – 2013-03-22 10:07:22

+0

好点!实际上,我希望只有XAML解决方案 – mamuesstack 2013-03-22 10:50:25

+1

XAML只是一个不知道ViewModel的附加属性。如果您不想使用ViewModel中的属性,请将MenuItems绑定到依赖属性。 – 2013-03-22 20:19:58

回答

1

我不太清楚你想做什么,但我怀疑风格会很方便。我会举一个例子。在这里我创建了一个有上下文菜单的网格按钮。在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> 
+0

这将改变所有MenuItems的可见性。我只想改变分享其可见性状态的MenuItems。 – mamuesstack 2013-03-22 10:53:11

+0

够公平的。你如何单独应用该风格而不是风格影响所有MenuItems?还是我仍然误解了这个问题? – 2013-03-22 13:59:16

+0

我认为如果我想要避免属性,这就是要走的路。我更新了你的代码片段。谢谢 – mamuesstack 2013-03-25 07:43:40

相关问题