将 FontFamily 应用于 Silverlight 4 Beta 中的所有控件
Posted
技术标签:
【中文标题】将 FontFamily 应用于 Silverlight 4 Beta 中的所有控件【英文标题】:Applying a FontFamily to all Controls in Silverlight 4 Beta 【发布时间】:2010-12-19 15:39:26 【问题描述】:我想在 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
基类执行此操作?
【问题讨论】:
【参考方案1】:与类型系统绑定的控件样式可能有点误导。它实际上基于控件DefaultStyleKey
属性的值。对于Button
,值为typeof(Button)
,对于TextBox
,值为typeof(Textbox)
。
如果TargetType
值等于控件DefaultStyleKey
值,则默认样式将应用于控件。没有检查DefaultStyleKey
中的Type
是否是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 ... -->
【讨论】:
谢谢,有道理。虽然我希望我可以将它设置在一个地方并让整个应用程序中的每个 UserControl 都采用这种风格。不过,我想我可以制作一个自定义 UserControl 来作为其他控件的基础。【参考方案2】:我通过在我的根视觉中指定 FontFamily 来做到这一点。所有没有明确设置 FontFamily 的子控件,从根视觉派生 FontFamily。
只有 ChildWindow 需要额外的 FontFamily 设置,因为它托管在“über”根视觉(作为弹出窗口)中。
【讨论】:
您使用什么 xaml 进行设置?根视觉不采用样式。【参考方案3】:这会有所帮助:
this.RootVisual = New MainPage();
(MainPage)this.RootVisual.FontFamily
= New System.Windows.Media.FontFamily(
"/SLApplication;component/Fonts/segoeui.ttf#Segoe UI");
【讨论】:
以上是关于将 FontFamily 应用于 Silverlight 4 Beta 中的所有控件的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Xamarin.Form 应用程序中使用 text 属性为项目中的所有控件全局设置 FontFamily?
Shell 上的 FontFamily -> TabBar -> Tab -> Title
内联 fontFamily 在 React / Next.js 9 中不起作用