1

I have a simple "Play/Pause" button that shows the "play" icon at the start of the application. Here's its code:

<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"/>`

What I want to do is change the play icon to a pause icon when it's pressed. All I have to do is change the content to {DynamicResource appbar_control_pause}. However, when I do the following:

playPauseButton.Content = "{DynamicResource appbar_control_stop}";

it shows just the string literally, inside the button. How could I change that property?

4

1 回答 1

5

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

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

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

playPauseButton.Content = FindResource("appbar_control_stop");

或者,如果您想这样DynamicResource做,您可以尝试SetResourceReference,例如:

playPauseButton.SetResourceReference(ContentControl.ContentProperty, "appbar_control_stop");

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

于 2015-04-10T20:07:17.763 回答