.net 菜单项触发器不工作
我想使用.net 菜单项触发器不工作,.net,wpf,triggers,menuitem,resourcedictionary,.net,Wpf,Triggers,Menuitem,Resourcedictionary,我想使用触发器自动隐藏禁用的菜单项。如果我在一个特定的MenuItem中像这样使用我的样式,它就会工作- <MenuItem Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContextMenu}}, Path=PlacementTarget.DataContex
触发器
自动隐藏禁用的菜单项
。如果我在一个特定的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>
我希望所有菜单项都有这种行为,我不想在我的
ContextMenu
中的每个MenuItem
上都使用这种样式。知道它为什么不工作吗?只有在没有设置x:Key
时,样式才会自动应用于目标类型的所有实例()。这是你的情况吗?这似乎有效。我刚刚试过:
<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>
谢谢尼古拉,但事实并非如此。我也试过不用x:键。对于您的信息(来自您提供的链接)-如第一个示例中所示的TargetType属性和x:Key属性的关系,将TargetType属性设置为TextBlock而不指定样式x:Key会导致将样式应用于所有TextBlock元素。在本例中,x:Key隐式设置为{x:Type TextBlock}。这意味着,如果显式地将x:Key值设置为除{x:Type TextBlock}以外的任何值,则该样式不会自动应用于所有TextBlock元素。如果将样式放置到ContextMenu.Resources中,该样式是否适用于内部菜单项?
<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>