6

我想在 Silverlight 4.0中给每Control一个特定FontFamily的内容。FontWeight我知道样式现在可以应用于某种类型的所有控件,所以我尝试了这个:

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

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

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

4

3 回答 3

5

与类型系统相关联的控件样式可能有点误导。它实际上基于控件DefaultStyleKey属性的值。在 a 的情况下,Button值是typeof(Button),对于 a TextBox,它是typeof(Textbox)

TargetType如果值等于控件值,则默认样式将应用于控件DefaultStyleKey。没有检查Typein是否DefaultStyleKey是 的导数TargetType

与字体相关的属性是一种特殊情况,因为大多数控件将从包含的上下文中继承字体属性的值。因此,您可以通过在 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" />

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

<UserControl ...namespace stuff here...
   Style="{StaticResource Common}">
  <!-- ... content here ... -->
于 2009-11-24T13:06:45.737 回答
1

我通过在我的根视觉中指定 FontFamily 来做到这一点。所有没有明确设置 FontFamily 的子控件,都从根视觉派生 FontFamily。

只有 ChildWindow 需要额外的 FontFamily 设置,因为它托管在“über”根视觉(作为弹出窗口)中。

于 2010-12-01T23:51:22.397 回答
1

这会有所帮助:

this.RootVisual = New MainPage();
(MainPage)this.RootVisual.FontFamily 
  = New System.Windows.Media.FontFamily(
    "/SLApplication;component/Fonts/segoeui.ttf#Segoe UI");
于 2011-06-24T17:25:44.890 回答