在RunTime更改ResourceDictionary的样式值

时间:2015-04-28 06:32:04

标签: wpf xaml mvvm

我已经为ResourceDictionary中的所有控件定义了一个常用的Font样式。

现在,要求是用户在某些应用程序级别配置中设置任何其他不同的Font,然后所有控件都应该获得新的Font属性/样式。

我知道ResourceDictionary不能拥有DataContext。但是可能有数百个字体(不可能有不同的主题),我在想是否有任何方法可以将ResourceDictionary的Font属性绑定到一个Property,它将在运行时获取新的Font。 那么有没有其他方法以通用的方式满足这一点。

1 个答案:

答案 0 :(得分:1)

您可以通过类似

的代码为app.resources设置新值
app.Resources[name] = new FontFamily(value);

其中app是您的应用程序(显然),并且可以在App.xaml.cs中直接更改资源时使用this进行设置 name是您的资源键,作为字符串,可以是例如"fontFamily"

<FontFamily x:Key="fontFamily">TheSansOsF</FontFamily>

您必须将字体的绑定设置为动态资源,否则更改字体将无法“即时”工作

<Setter Property="Label.FontFamily" Value="{DynamicResource fontFamily}"></Setter>

编辑:此外,当您尝试使用例如double作为资源,你可以使用像这样的资源

<sys:Double x:Key="ctrlWidth">50</sys:Double>

并将sys添加到应用程序标记

<Application x:Class="Presenter.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:sys="clr-namespace:System;assembly=mscorlib"