C#UWP更改全局应用程序背景

时间:2017-10-03 12:19:54

标签: c# colors background uwp resize

当我调整UWP应用程序窗口的大小时,我需要更改右侧显示的默认白色背景,我需要动态地执行此操作。

我试过了:

var newBackground = Application.Current.Resources["ApplicationPageBackgroundThemeBrush"] as SolidColorBrush;
if (newBackground != null)
{
    newBackground.Color = newColor;
}

newBackground已更改,但不会影响应用程序。

任何帮助?

2 个答案:

答案 0 :(得分:0)

如果您要覆盖ApplicationPageBackgroundThemeBrush

Application.Current.Resources["ApplicationPageBackgroundThemeBrush"] = Colors.Red;

答案 1 :(得分:0)

对于您的问题,我们需要在后台检查一些内容:

当您检查generaic.xaml中的ApplicationPageBackgroundThemeBrush时(要知道什么是generaic.xaml,您可以看到here),您会发现ApplicationPageBackgroundThemeBrush在"默认"中定义了三次, "高对比度"还有" Light"。因此,当您调用请求主题时,所有颜色都将在不同主题中更改。

    this.RequestedTheme = ElementTheme.Dark

请回到您的问题,如果您将请求主题更改为" Dark"你会发现改变颜色代码:

    newBackground.Color = newColor;

不会改变,因为" Dark"的默认设置。(适用于默认/ Light主题) 而且似乎我们无法在运行时从代码背后修改此主题画笔。

我认为唯一的方法是自己创建主题颜色,然后通过明确设置元素来更改颜色。

设置主题颜色。新的acrylic document为我们提供了一个好点。在这里,我为您编写一个简单的示例,以显示默认主题的工作原理:

  1. 创建字典并插入以下代码:

    <ResourceDictionary.ThemeDictionaries>
        <ResourceDictionary x:Key="Default">
            <SolidColorBrush x:Key="ApplicationPageBackgroundThemeBrush" Color="Blue"></SolidColorBrush>
        </ResourceDictionary>
        <ResourceDictionary x:Key="Dark">
            <SolidColorBrush x:Key="ApplicationPageBackgroundThemeBrush" Color="Yellow"></SolidColorBrush>
        </ResourceDictionary>
    </ResourceDictionary.ThemeDictionaries>
    
  2. 将其添加到app.xaml:

    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Dictionary1.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
    
  3. 要明确设置元素,请执行类似mygrid.background = xxxx的操作。如果要在调整大小时触发它,请更改adaptivetrigger中的属性。