我想在Silverlight 4.0中为每个Control
提供一定的FontFamily
和FontWeight
。我知道样式现在可以应用于某种类型的所有控件,所以我尝试了这个:
<Style TargetType="Control">
<Setter Property="FontFamily" Value="Arial" />
<Setter Property="FontWeight" Value="Bold" />
</Style>
不幸的是,这似乎不起作用。但是,我可以为从Control
派生的类型执行此操作。例如,将TargetType
设置为Button
会将这些值应用于我的应用中的每个Button
。
为什么我不能为Control
基类做这个呢?
答案 0 :(得分:5)
与类型系统绑定的控件样式可能有点误导。它实际上基于控件DefaultStyleKey
属性的值。如果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" />
然后在每个用户控件中: -
<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");