Триггер MenuItem не работает
Я хочу использовать 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
, Любая идея, почему она не работает?
2 ответа
Это похоже на работу. Я только что попробовал это:
<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:Key
набор ( http://msdn.microsoft.com/en-us/library/ms745683.aspx). Это твой случай?