我想使用trigger
自动隐藏已禁用的MenuItem
。如果我在这样的特定MenuItem
内使用我的风格,它可以工作 -
<MenuItem
Command="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type ContextMenu}},
Path=PlacementTarget.DataContext.ExportCommand}"
Header="Export...">
<MenuItem.Style>
<Style TargetType="{x:Type MenuItem}">
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Visibility" Value="Collapsed" />
</Trigger>
</Style.Triggers>
</Style>
</MenuItem.Style>
</MenuItem>
但如果我将style
放在ResourceDictionary
这样的内容中,那么它就不起作用了 -
<Style x:Key="{x:Type MenuItem}" TargetType="{x:Type MenuItem}" >
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Visibility" Value="Collapsed" />
</Trigger>
</Style.Triggers>
</Style>
我想对我的所有菜单项都有此行为,我不想将此样式放在MenuItem
内的每个ContextMenu
上。任何想法为什么它不起作用?
答案 0 :(得分:1)
仅当样式没有x:Key
设置(http://msdn.microsoft.com/en-us/library/ms745683.aspx)时,样式才会自动应用于目标类型的所有实例。这是你的情况吗?
答案 1 :(得分:1)
这似乎有效。我刚试过了:
<Grid>
<Grid.Resources>
<Style x:Key="{x:Type MenuItem}" TargetType="MenuItem" >
<Setter Property="OverridesDefaultStyle" Value="False" />
<Setter Property="TextBlock.Foreground" Value="Blue" />
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Visibility" Value="Collapsed" />
</Trigger>
</Style.Triggers>
</Style>
</Grid.Resources>
<TextBox Text="Hello!" IsReadOnly="True">
<TextBox.ContextMenu>
<ContextMenu >
<MenuItem Header="Item1" />
<MenuItem Header="Item2" IsEnabled="False"/>
<MenuItem Header="Item3" />
</ContextMenu>
</TextBox.ContextMenu>
</TextBox>
</Grid>