MeL*_*blo 1 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"/>`
Run Code Online (Sandbox Code Playgroud)
我想要做的是在按下播放图标时将其更改为暂停图标。我所要做的就是将内容更改为{DynamicResource appbar_control_pause}. 但是,当我执行以下操作时:
playPauseButton.Content = "{DynamicResource appbar_control_stop}";
Run Code Online (Sandbox Code Playgroud)
它只显示按钮内的字面字符串。我怎么能改变那个属性?
您在 XAML 中使用的字符串{ }是特殊的(它们被称为标记扩展),因此 XAML 处理器不会将它们视为“字符串”(而是调用扩展来提供结果对象,而不是直接分配字符串)。特别是,您将在此处使用DynamicResource 标记扩展。
但这仅适用于 XAML 处理器,因此当您Content使用 C# 代码中的字符串分配属性时,它只会分配特定的字符串:XAML 处理器根本不会解析它(并且DynamicResource永远不会调用标记扩展)。
如果要在代码中加载资源,可以尝试:
playPauseButton.Content = FindResource("appbar_control_stop");
Run Code Online (Sandbox Code Playgroud)
或者,如果你想这样DynamicResource做,你可以尝试SetResourceReference,例如:
playPauseButton.SetResourceReference(ContentControl.ContentProperty, "appbar_control_stop");
Run Code Online (Sandbox Code Playgroud)
第二种方法将为资源分配一个真正的引用(而不是仅仅加载它),因此如果资源发生变化(因为父级发生变化,或使用事件或任何事情),将重新评估该属性。
| 归档时间: |
|
| 查看次数: |
3316 次 |
| 最近记录: |