比如现在XAML内容如下:
Code Snippet
<Button>
<StackPanel>
<Image Source="up.png"/>
<Label>提交</Label>
</StackPanel>
</Button>
这是一个带有小图标的提交按钮。
我想在资源文件中定义Button的样式,比如改为橙色矩形边框、灰色与黑色的渐变背景。
但是改完之后会发现“提交”二字还是黑的,很不协调,而我即使在样式中改变Button的Foreground为白色,也不会起任何作用。
因为Label如果不设置Foreground的话,它会自动改成Black,而不遵循继承原则~
样式修改代码内容大致如下:
Code Snippet
<Style TargetType="Button">
<Setter Property="Foreground" Value="#FFF" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="back" BorderThickness="1" BorderBrush="#A73">
<Border.Background>
<LinearGradientBrush>
<GradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="#999" Offset="0.0"/>
<GradientStop Color="#999" Offset="0.5"/>
<GradientStop Color="#777" Offset="0.51"/>
</GradientStopCollection>
</GradientBrush.GradientStops>
</LinearGradientBrush>
</Border.Background>
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
研究了半天ContentPresenter ,也没找出从哪可以改内容的样式,网上的文章也搜遍了,只有MSDN稍微提了句“如果模板定义包含 ContentPresenter,则 ControlTemplate 需要 TargetType 属性”,仍然是一头雾水,MSDN那文章链接:http://msdn.microsoft.com/zh-cn/library/ms745683.aspx
恳请各位高手指点一二!
我现在就是想把Button里面的Label显示的颜色改为白色。
注意,不可以更改全局Label的颜色,因为我不想连带改变Button外的正常Label的颜色。
也不能用定义x:Name的方式由Label显式载入样式,因为类似的按钮可能还有很多,一一设置很麻烦且失去了全局样式的使用意义了。