WPF在运行时修改Style

时间:2017-10-24 20:54:26

标签: c# wpf material-design-in-xaml

您能告诉我如何在运行时更改样式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}}

用于第二个代码框。

如果我在运行时手动修改代码,一切正常,并且发生了更改,但如果我按代码执行,则不会发生任何更改。

当我按下按钮时,如何通过代码进行此更改?

1 个答案:

答案 0 :(得分:0)

  

StaticResource和DynamicResource之间的区别在于   如何通过引用元素检索资源。   StaticResource仅由引用元素检索一次   并用于资源的整个生命周期。另一方面,   每次引用的对象都会获取DynamicResource   使用

StaticResource更改为DynamicResource应该开展的工作。