跨应用程序更改/使用StaticResource

use*_*221 0 c# xaml windows-phone windows-phone-7.1 windows-phone-8

我想改变肤色,所以这样做:

<Application.Resources>
    <Color x:Key="AppColor">#FFFFFF</Color>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)

然后在整个应用程序中使用它,例如:

<...... BackgroundColor="{StaticResource AppColor}" ... />
Run Code Online (Sandbox Code Playgroud)

它工作正常.但是当我试图改变它时,我遇到了一些问题.

Application.Current.Resources["AppColor"] = Color.FromArgb(255, 0, 255, 255);
Run Code Online (Sandbox Code Playgroud)

我得到一个未实现的错误.当我尝试删除它并添加一个新的:

Application.Current.Resources.Remove("AppColor");
var color = Color.FromArgb(255, 0, 255, 255);
Application.Current.Resources.Add("AppColor", color);
Run Code Online (Sandbox Code Playgroud)

我得到了一个xaml错误,就在我使用那个静态值的时候.

我该如何使用颜色并进行更改?

Ahm*_*med 8

一种可能的解决方案是SolidColorBrush在资源中使用

实施例限定SolidColorBrush,具有x:Name="AppBrush"在App.xaml中资源

<SolidColorBrush x:Key="AppBrush" Color="#FF7DC959"/>
Run Code Online (Sandbox Code Playgroud)

如果您的绑定目标是颜色,那么它将是这样的

<....BackgroundColor="{Binding Color,Source={StaticResource AppBrush}}">
Run Code Online (Sandbox Code Playgroud)

如果您的绑定目标是SolidColorBrush,它将是这样的

<....BackgroundColor="{StaticResource AppBrush}">
Run Code Online (Sandbox Code Playgroud)

然后,您可以在代码中更改Color属性

SolidColorBrush brush = (SolidColorBrush)App.Current.Resources["AppBrush"];
brush.Color = Colors.DarkGray;
Run Code Online (Sandbox Code Playgroud)