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

时间:2009-11-23 21:17:41

标签: silverlight controls fonts silverlight-4.0 styles

我想在Silverlight 4.0中为每个Control提供一定的FontFamilyFontWeight。我知道样式现在可以应用于某种类型的所有控件,所以我尝试了这个:

<Style TargetType="Control">
    <Setter Property="FontFamily" Value="Arial" />
    <Setter Property="FontWeight" Value="Bold" />
</Style>

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

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

3 个答案:

答案 0 :(得分:5)

与类型系统绑定的控件样式可能有点误导。它实际上基于控件DefaultStyleKey属性的值。如果Button的值为typeof(Button),而TextBox的值为typeof(Textbox)

如果TargetType值等于控件DefaultStyleKey值,则默认样式将应用于控件。没有检查TypeDefaultStyleKey是否是TargetType的衍生物。

字体相关属性是一种特殊情况,因为大多数控件都将从包含的上下文继承Font属性的值。因此,您可以通过在UserControl元素上指定FontFamilyFontWeight来有效地实现相同的结果。

修改

来自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" />

然后在每个用户控件中: -

<UserControl ...namespace stuff here...
   Style="{StaticResource Common}">
  <!-- ... content here ... -->

答案 1 :(得分:1)

我是通过在root视觉中指定FontFamily来实现的。没有显式FontFamily设置的所有子控件都从根视图派生FontFamily。

只有ChildWindow需要额外的FontFamily设置,因为它以“über”root visual(作为弹出窗口)托管。

答案 2 :(得分:1)

这会有所帮助:

this.RootVisual = New MainPage();
(MainPage)this.RootVisual.FontFamily 
  = New System.Windows.Media.FontFamily(
    "/SLApplication;component/Fonts/segoeui.ttf#Segoe UI");