跨应用程序更改/使用StaticResource

时间:2013-12-23 10:26:23

标签: c# xaml windows-phone-8 windows-phone windows-phone-7.1

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

<Application.Resources>
    <Color x:Key="AppColor">#FFFFFF</Color>
</Application.Resources>

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

<...... BackgroundColor="{StaticResource AppColor}" ... />

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

Application.Current.Resources["AppColor"] = Color.FromArgb(255, 0, 255, 255);

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

Application.Current.Resources.Remove("AppColor");
var color = Color.FromArgb(255, 0, 255, 255);
Application.Current.Resources.Add("AppColor", color);

我得到了一个xaml错误,只要我使用了这个静态值。

如何使用颜色并更改颜色?

2 个答案:

答案 0 :(得分:8)

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

示例定义SolidColorBrush,在App.xaml资源中使用x:Name="AppBrush"

<SolidColorBrush x:Key="AppBrush" Color="#FF7DC959"/>

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

<....BackgroundColor="{Binding Color,Source={StaticResource AppBrush}}">

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

<....BackgroundColor="{StaticResource AppBrush}">

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

SolidColorBrush brush = (SolidColorBrush)App.Current.Resources["AppBrush"];
brush.Color = Colors.DarkGray;

答案 1 :(得分:2)

使用DynamicResource代替StaticResource应解决此问题:

<...... BackgroundColor="{DynamicResource AppColor}" />
Application.Current.Resources["AppColor"] = Color.FromArgb(255, 0, 255, 255);