Стили пунктов меню WPF - PullRequest
1 голос
/ 12 марта 2010

У меня есть ресурс приложения следующего типа

<Style TargetType="{x:Type TextBlock}">
    <Setter Property="Background" Value="{DynamicResource windowTextBackColor}"/>
    <Setter Property="Foreground" Value="{DynamicResource windowsTextForeColor}"/>
</Style>

Таким образом, все текстовые блоки в моем приложении должны принимать эти цвета.

Однако меню и содержащиеся в нем элементы MenuItem в моем главном окне не принимают эти цвета?

Я должен сделать XAML

для того, чтобы принять эти цвета. Есть ли причина, по которой установка стиля для блоков текста не работает?

Спасибо

1 Ответ

1 голос
/ 12 марта 2010

Я думаю, вы должны стилизовать меню и пункты меню отдельно. MenuItem - это HeaderedContentControl, а его свойство Header - не TextBlock, а object, поэтому стиль TextBlock на него не повлияет.

Вы также можете попробовать изменить этот стиль на целевой Control вместо TextBlock. (Элемент управления - это место, где определены Foreground и Background.) Я не могу с уверенностью сказать, что это будет работать, но если это произойдет, то каждый элемент управления (TextBlocks, MenuItems, Buttons ...) эти цвета фона и переднего плана.

Кроме того, вы можете рассмотреть возможность использования BasedOn, чтобы вы могли «наследовать» стили. Если вы этого не сделаете, то стили, определенные выше по иерархии, не будут влиять на элементы управления, стиль которых определен ниже в иерархии. В основном, нижние маскируют более высокие, если вы не использовали BasedOn. Используйте это следующим образом:

BasedOn="{StaticResource {x:Type <your type here>}}"
...