将FontFamily应用于Silverlight 4 Beta中的所有控件

Dav*_*own 6 silverlight fonts controls styles silverlight-4.0

我想给每Control一个特定的FontFamilyFontWeight在Silverlight 4.0.我知道样式现在可以应用于某种类型的所有控件,所以我试过这个:

<Style TargetType="Control">
    <Setter Property="FontFamily" Value="Arial" />
    <Setter Property="FontWeight" Value="Bold" />
</Style>
Run Code Online (Sandbox Code Playgroud)

不幸的是,这似乎不起作用.但是,我可以为从中派生的类型执行此操作Control.例如,设置TargetTypeButton将这些值应用于Button我的应用程序中的每个值.

为什么我不能为Control基类做这个呢?

Ant*_*nes 5

与类型系统绑定的控件样式可能有点误导.它实际上是基于controls DefaultStyleKey属性的值.在A的情况下Button的值是typeof(Button)和用于TextBoxtypeof(Textbox).

如果TargetType值等于控件DefaultStyleKey值,则默认样式将应用于控件.不存在是否考试TypeDefaultStyleKey是的衍生物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)