应用主题的最简单方法是什么

时间:2017-09-12 07:35:43

标签: c# uwp themes resourcedictionary

假设我有一个ResourceDictionary:

更新

<SolidColorBrush x:Key="AquaBrush" Color="#257D8E"/> 

<SolidColorBrush x:Key="GreenBrush" Color="Green"/>

让我们说这是我的应用: enter image description here

我有一个带有项目的组合框(Aqua,Green和Gray)当我选择Aqua Button时,它应该显示如下: enter image description here  我要设置的Button和其他控件也应该将其背景更新为aqua。

如何将SplitView,Button,其他控件的背景绑定到一个属性,当我选择&#34; aqua&#34;它将使用&#34; AquaBrush&#34;当我选择&#34; Green&#34;时,它将使用&#34; GreenBrush&#34;?

感谢。

1 个答案:

答案 0 :(得分:1)

由于您在XAML中定义了SolidColorBrush资源,因此您可以从后面的代码执行此操作,以便根据运行时的条件更改背景颜色:

if(Some Condition){
    relativePanelName.Background = (SolidColorBrush)Resources["NavPaneBackgroundBrushBlue"];
}else {
    relativePanelName.Background = (SolidColorBrush)Resources["NavPaneBackgroundBrushGreen"];
}

希望这会有所帮助..!

修改:

此外,您不仅可以定义自己的静态资源,还可以使用系统theme resources

例如,您可以像这样访问系统的强调色:

C#

var color = (Color)this.Resources["SystemAccentColor"];

的Xaml

<Grid.Background>
   <SolidColorBrush Color="{StaticResource SystemAccentColor}"/>
</Grid.Background>

编辑2: 由于问题已经更改并以更好的方式框架,因此很明显您想要了解应用程序范围的主题。 您可以通过多种方式获得应用程序范围的主题,所以这里有一个:

  • 在App.Xaml中定义应用程序资源,以便它可以 在您的申请中提供。

    enter image description here

  • 现在这些资源将在所有页面中显示。您可以像这样访问它们:

enter image description here

这样你就可以拥有应用范围的主题。

您还可以从后面的代码访问应用程序资源:

gridName.Background=new SolidColorBrush((Color)Application.Current.Resources["ColorThree"]);

编辑3:

在app.xaml:

<ResourceDictionary>
            <Color x:Key="ThemeColor">#f4425f</Color>
            <SolidColorBrush x:Key="UserAccentBrush" Color="{StaticResource ThemeColor}"/>
</ResourceDictionary>

点击你的按钮只需更改&#34; UserAccentBrush&#34;的颜色。它将反映在使用画笔的所有控件中。

private void Button_Click(object sender, RoutedEventArgs e)
{
    var brush = (SolidColorBrush)Application.Current.Resources["UserAccentBrush"];

            if (cb.SelectedIndex != -1)
            {
                switch (cb.SelectedIndex)
                {
                    case 0:
                        brush.Color = Color.FromArgb(255, 242, 101, 34);
                        break;

                    case 1:
                        brush.Color = Color.FromArgb(255, 232, 10, 90);
                        break;
                }
            }
}

请注意我直接使用application.current.resources,您可能需要修改一下代码..

如果您需要保存此颜色并在下次用户打开应用程序时应用它,则需要将其保存到应用程序设置(或您可能正在维护的任何设置文件),并在应用程序加载时应用颜色更改代码。 !