【问题标题】:Change/use StaticResource across app跨应用更改/使用 StaticResource
【发布时间】:2013-12-23 10:26:22
【问题描述】:

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

<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 错误。

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

【问题讨论】:

  • 那也没用!
  • 我认为根本问题是静态资源不应该在运行时改变。 link 可能会给你一个解决方案。

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


【解决方案1】:

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

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

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

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

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

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

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

然后你可以在代码中改变颜色属性

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

【讨论】:

    【解决方案2】:

    使用DynamicResource 而不是StaticResource 应该可以解决这个问题:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-26
      • 2021-12-20
      • 1970-01-01
      相关资源
      最近更新 更多