如何从C#代码更改DynamicResource?

时间:2015-04-10 19:53:15

标签: c# wpf dynamicresource

我有一个简单的"播放/暂停"按钮,显示"播放"应用程序开头的图标。这是其代码:

<Button x:Name="playPauseButton" Style="{DynamicResource MetroCircleButtonStyle}" 
                        Content="{DynamicResource appbar_control_play}"
                        HorizontalAlignment="Left" Margin="77,70,0,0" VerticalAlignment="Top" Width="75" Height="75" Click="Button_Click"/>`

我想要做的是在按下时将播放图标更改为暂停图标。我所要做的就是将内容更改为{DynamicResource appbar_control_pause}。但是,当我执行以下操作时:

playPauseButton.Content = "{DynamicResource appbar_control_stop}";

它在按钮内按字面意思显示字符串。我怎么能改变那个属性?

1 个答案:

答案 0 :(得分:2)

您使用{ }在XAML中编写的字符串是特殊的(它们被称为Markup Extensions),因此它们不会被XAML处理器视为“字符串”(而是调用扩展来提供结果对象,而不是直接分配字符串)。特别是,您将在这里使用DynamicResource markup extension

但这仅适用于XAML处理器,因此当您使用C#代码中的字符串分配Content属性时,它只会分配特定的字符串:它根本不会被XAML处理器解析(而{永远不会调用{1}}标记扩展名。)

如果要在代码中加载资源,可以尝试:

DynamicResource

或者,如果您想按playPauseButton.Content = FindResource("appbar_control_stop"); 执行此操作,可以尝试SetResourceReference,例如:

DynamicResource

第二种方法会为资源分配一个真正的引用(而不是只加载它),所以如果资源发生变化(因为父变化,或者使用事件或任何东西),将重新评估该属性。