Есть ли способ предотвратить переопределение ItemContainerStyle, например, уже установленного стиля (например, через <Style TargetType="{x:Type MenuItem}">
)?
Стиль для 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 проистекает из другой вопрос о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
, родитель имеет ожидаемый стиль.
Спасибо за ваш вклад!