views:

45

answers:

1

Hi,

I have an application resource of the following

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

So all the text blocks in my application should assume those colours.

However the Menu and its containing MenuItems on my Main Window does not take these colours?

I have to do the XAML

for it to assume those colours, Is there a reason why setting a style that targets Text blocks does not work?

Thanks

+1  A: 

I think you have to style the menu and menuitems separately. A MenuItem is a HeaderedContentControl, and its Header property is not a TextBlock, but an object, so it wouldn't be affected by a style for TextBlock.

You might also try changing that style to target Control instead of TextBlock. (Control is where Foreground and Background are defined.) I can't say for sure that it'll work, but if it does, it'll make every Control (TextBlocks, MenuItems, Buttons...) have those background and foreground colors.

Also, you might consider using BasedOn so that you can "inherit" the styles. If you don't, then styles defined farther up the hierarchy won't affect controls that have a style defined lower in the hierarchy. Basically, the lower ones mask the higher ones, unless you used BasedOn. Use it in this fashion:

BasedOn="{StaticResource {x:Type <your type here>}}"
Benny Jobigan
yes.. and since its `Header` property is an `object`, you can also try `HeaderTemplate` to include `TextBlock`
Mihir Gokani