在运行时更改资源

时间:2013-12-03 18:36:39

标签: c# wpf resources dynamicresource

我们假设我们有以下词典:

<ResourceDictionary xmlns:sys="clr-namespace:System;assembly=mscorlib">
    <sys:String x:Key="Test">Ala ma kota</sys:String>
</ResourceDictionary>

此字典在自定义控件中合并:

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="MyDictionary.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>

如何在应用程序运行期间从后面的代码中完全更改资源“Test”的值?

3 个答案:

答案 0 :(得分:1)

如果您希望从代码中更改资源,那么只需像字典一样访问资源并更改所需的值:)

像这样:

this.Resource["myThickness"] = new Thickness(2);

那就是它:)

答案 1 :(得分:1)

您可以更改resource from code-behind,但主要的是您如何绑定该资源,即通过StaticResourceDynamicResource

像这样修改 -

Resources["Test"] = "Ala ma kota updated";

XAML (从代码后面更新资源后,两种方法的文本值会有所不同) -

<TextBlock Text="{StaticResource Test}"/>  // Will be Ala ma kota
<TextBlock Text="{DynamicResource Test}"/> // Will be Ala ma kota updated

答案 2 :(得分:1)

您必须为此使用DynamicResource

<TextBox FontFamily="{DynamicResource Test}" Margin="135,122,187,180" 
    Text="test"/>
<Button FontFamily="{DynamicResource Test}" Margin="135,144,329,154" 
    Content="test"/>

Read on MSDN about DynamicResource:

通过将XAML属性属性的值推迟为对已定义资源的引用来提供该值。该资源的查找行为类似于运行时查找。