Dav*_*own 6 silverlight fonts controls styles silverlight-4.0
我想给每Control一个特定的FontFamily和FontWeight在Silverlight 4.0.我知道样式现在可以应用于某种类型的所有控件,所以我试过这个:
<Style TargetType="Control">
<Setter Property="FontFamily" Value="Arial" />
<Setter Property="FontWeight" Value="Bold" />
</Style>
Run Code Online (Sandbox Code Playgroud)
不幸的是,这似乎不起作用.但是,我可以为从中派生的类型执行此操作Control.例如,设置TargetType为Button将这些值应用于Button我的应用程序中的每个值.
为什么我不能为Control基类做这个呢?
与类型系统绑定的控件样式可能有点误导.它实际上是基于controls DefaultStyleKey属性的值.在A的情况下Button的值是typeof(Button)和用于TextBox它typeof(Textbox).
如果TargetType值等于控件DefaultStyleKey值,则默认样式将应用于控件.不存在是否考试Type的DefaultStyleKey是的衍生物TargetType.
字体相关属性是一种特殊情况,因为大多数控件将从包含上下文继承Font属性的值.因此,您可以通过在UserControl元素上指定FontFamily和来有效地实现相同的结果FontWeight.
编辑
来自OP的评论: -
我希望我可以在一个地方设置它,让整个应用程序中的每个UserControl都采用这种风格.
您最接近的是在应用程序资源中放置一个键控样式,并确保所有用户控件都绑定到该样式.当然,这仍然需要每个用户控件的一些合作,但至少字体选择保留在一个地方.
例如在app.xaml中: -
<Style x:Key="Common" TargetType="UserControl">
<Setter Property="FontFamily" Value="Arial" />
<Setter Property="FontWeight" Value="Bold" />
<Setter Property="Foreground" Value="Blue" />
Run Code Online (Sandbox Code Playgroud)
然后在每个用户控件中: -
<UserControl ...namespace stuff here...
Style="{StaticResource Common}">
<!-- ... content here ... -->
Run Code Online (Sandbox Code Playgroud)