如何在代码(UWP)中更改Xaml资源中的颜色定义

时间:2017-03-04 13:25:17

标签: c# wpf xaml uwp uwp-xaml

[UWP]

我有很多来自App.xaml

的颜色绑定网格

MainPage.xaml ...

        <Grid
            Height="45"
            Margin="0,0,0,10"
            Background="{ThemeResource MyColor}">

的App.xaml

<Application
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    RequestedTheme="Dark">
    <Application.Resources>
        <ResourceDictionary>
            <SolidColorBrush x:Key="MyColor">#FFFFFF</SolidColorBrush>

然后我想用这样的代码改变它的所有内容

    Application.Current.Resources["MyColor"] = new SolidColorBrush(Windows.UI.Color.FromArgb(255, 242, 101, 34));

但它不起作用。我可以错过什么吗?当我导航到另一个页面并导航回来时,上面的代码抛出一个System.Exception

4 个答案:

答案 0 :(得分:1)

当您尝试在WPF中使用StaticResource时,

ThemeResourceDynamicResource不支持动态更改。顺便说一句,如果您重新加载视图,例如前后导航,您可以看到更改,但这不是一个好的解决方案。

另一方面,您可以使用ThemeResource实现一些动态更改并更改例如。颜色取决于当前主题(暗,亮,高对比度)

进一步阅读:https://docs.microsoft.com/en-us/windows/uwp/controls-and-patterns/xaml-theme-resources

答案 1 :(得分:0)

如果你知道它是SolidColorBrush,那么直接修改Color属性。

var brush = (SolidColorBrush)Application.Current.Resources["MyColor"];
brush.Color = Windows.UI.Color.FromArgb(255, 242, 101, 34);

您无法更改资源,但如果您有权访问,则可以修改其属性。

答案 2 :(得分:0)

我是按照以下方式做到的:

的App.xaml

<Application
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    RequestedTheme="Dark">
<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.ThemeDictionaries>
            <ResourceDictionary x:Key="Dark">
                <Color x:Key="UserAccentColor">#FFFFA500</Color>
                <SolidColorBrush x:Key="UserAccentBrush" Color="{StaticResource UserAccentColor}"/>
            </ResourceDictionary>
            <ResourceDictionary x:Key="Light">
                <Color x:Key="UserAccentColor">#FFFFA500</Color>
                <SolidColorBrush x:Key="UserAccentBrush" Color="{StaticResource UserAccentColor}"/>
            </ResourceDictionary>

更改颜色:

foreach (var dict in App.Current.Resources.ThemeDictionaries)
{
    var theme = dict.Value as Windows.UI.Xaml.ResourceDictionary;
    ((SolidColorBrush)theme["UserAccentBrush"]).Color = color;
}

答案 3 :(得分:0)

(App.Current.Resources [“ MyColor”] as SolidColorBrush).Color = Windows.UI.Color.FromArgb(255,242,101,34);