您能告诉我如何在运行时更改样式Setter。 我正在使用Material Design for XAML。 当我按下按钮时我想在明暗模式之间切换。 Snackbar的背景更改(通过Material Design的作者制作的脚本完成),但“OK”按钮的颜色不会改变。白色石灰很难分辨。所以我想把Lime OK改成Purple OK。
这是初始代码
<UserControl.Resources>
<Style BasedOn="{StaticResource MaterialDesignSnackbarActionButton}" x:Key="SnackbarThemeChangedStyle" TargetType="Button">
<Setter Property="Foreground" Value="{DynamicResource PrimaryHueMidBrush}"/>
</Style>
</UserControl.Resources>
.....
<materialDesign:Snackbar x:Name="SnackbarMaximumCharacters" HorizontalAlignment="Stretch" VerticalContentAlignment="Bottom" ActionButtonStyle="{StaticResource SnackbarThemeChangedStyle}" IsActive="True">
<materialDesign:SnackbarMessage Content="The maximum number of characters is 15" ActionContent="OK" ActionClick="SnackbarMessage_ActionClick"/>
</materialDesign:Snackbar>
(Image1)https://i.imgur.com/TuqtGO1.png
一切正常,直到我改用黑暗模式。 当我切换到darkmode时,我想拥有以下代码:
<materialDesign:Snackbar x:Name="SnackbarMaximumCharacters" HorizontalAlignment="Stretch" VerticalContentAlignment="Bottom" ActionButtonStyle="{StaticResource MaterialDesignSnackbarActionButton}" IsActive="True">
<materialDesign:SnackbarMessage Content="The maximum number of characters is 15" ActionContent="OK" ActionClick="SnackbarMessage_ActionClick"/>
</materialDesign:Snackbar>
(图像2)
https://i.imgur.com/44IUanD.png(
我可以通过写作来完成同样的结果:
<materialDesign:Snackbar x:Name="SnackbarMaximumCharacters" HorizontalAlignment="Stretch" VerticalContentAlignment="Bottom" ActionButtonStyle="{StaticResource MaterialDesignSnackbarActionMidButton}" IsActive="True">
<materialDesign:SnackbarMessage Content="The maximum number of characters is 15" ActionContent="OK" ActionClick="SnackbarMessage_ActionClick"/>
</materialDesign:Snackbar>
是第一个代码框的等价物,并且:
{{1}}
用于第二个代码框。
如果我在运行时手动修改代码,一切正常,并且发生了更改,但如果我按代码执行,则不会发生任何更改。
当我按下按钮时,如何通过代码进行此更改?
答案 0 :(得分:0)
StaticResource和
DynamicResource
之间的区别在于 如何通过引用元素检索资源。StaticResource
仅由引用元素检索一次 并用于资源的整个生命周期。另一方面, 每次引用的对象都会获取DynamicResource
使用
将StaticResource
更改为DynamicResource
应该开展的工作。