Есть ли способ предотвратить ItemContainerStyle от переопределения уже установленного стиля (например, через <Style TargetType="{x:Type MenuItem}">
)?Предотвращение ItemContainerStyle от переопределения уже установлен Стиль
Стиль для MenuItem
уже определен в ResourceDictionary
XAML-файл, который загружается при запуске приложения:
<ResourceDictionary>
<Style TargetType="{x:Type MenuItem}">
<Setter Property="Foreground" Value="{DynamicResource TextForeground}"/>
.. and so on
</Style>
</ResourceDictionary>
У меня есть следующий MenuItem
определение XAML. MenuItem
обернут внутри ContextMenu
родового TextBlock
(просто стоит упомянуть, я думаю). Все идет хорошо с самого меню, но его дети (фактические значения по Enum) получить другой стиль, так как ItemContainerStyle
переопределяет его:
<MenuItem Header="DisplayType"
Name="DisplayTypeMenu"
ItemsSource="{Binding Source={StaticResource DisplayTypeValues}}">
<MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="MenuItem.IsCheckable" Value="True" />
<Style.Triggers>
<Trigger Property="MenuItem.Header"
Value="{x:Static enums:DisplayType.Description}" >
<Setter Property="MenuItem.IsChecked" Value="True" />
</Trigger>
</Style.Triggers>
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
ItemContainerStyle вытекает из another question of mine.
MenuItem помещается внутри других слоев, верхний слой представляет собой пользовательский ContentControl:
public class SomeGradientPanel : ContentControl
{
public SomeGradientPanel()
{
DefaultStyleKey = typeof(SomeGradientPanel);
}
}
Код выше, кажется, быть хорошим кандидатом на источник проблемы!?
Таким образом, полная структура:
<SomeNameSpace:SomeGradientPanel>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="40"></RowDefinition>
<RowDefinition Height="20"></RowDefinition>
</Grid.RowDefinitions>
<TextBlock x:Name="SomeLabel">
<TextBlock.ContextMenu>
<ContextMenu>
<!-- The MenuItem code snippet from above !-->
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
</Grid>
</SomeNameSpace:SomeGradientPanel>
Могу ли я обратиться к уже определены Style
для MenuItem
внутри ItemContainerStyle
? Переопределение стиля происходит только у детей указанного MenuItem
, у родителя есть ожидаемый стиль.
Благодарим вас за ввод!
Да, но это делает ребенок, которые будут отображаться с еще более основным стилем, чем раньше (например, отсутствует текст/заголовок). Еще раз спасибо за ваш ввод! – Dr1Ku
@ Dr1Ku: Уверенная вещь :) Я не могу воспроизвести это. Есть ли у вас какие-либо другие ресурсы, которые могут привести к применению неявного стиля MenuItem? Как PresentationFramework.Aero или что-то в app.xaml? –
@ Dr1Ku: Если вы удалите стиль для ItemContainerStyle, он отлично работает? –