如何使用元素背景颜色的动态值?

时间:2013-12-24 07:10:44

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

我希望能够更改应用的主题,即使应用已启动。

所以我定义了一个资源:

<Application.Resources>
    <SolidColorBrush x:Key="AppBrush" Color="#AAAAAA"/>
</Application.Resources>

在整个应用中使用它:

<... Background="{StaticResource AppBrush}" .. />

我可以在App的构造函数中更改它:

((SolidColorBrush)Resources["AppBrush"]).Color = color;

现在我可以改变它,但是用户必须重新启动应用才能使更改生效。我不能在应用程序内部的某处使用最后一行代码我收到内存错误。

如何从应用内部更改应用主题并查看更改?

2 个答案:

答案 0 :(得分:0)

发生错误是因为App.xaml中定义了AppBrush资源,并且您希望使用相同的代码从App.xaml外部访问它。您必须稍微更改代码以明确告诉应用程序在App.xaml中找到资源:

((SolidColorBrush)App.Current.Resources["AppBrush"]).Color = color;

如果不这样做,应用程序将最终在当前页面中搜索AppBrush资源,然后无法找到它。

答案 1 :(得分:0)

不幸的是,Windows Phone不支持DynamicResource。所以你有两个选择:

1)接受限制并要求重新启动 2)将内容(无论可能是什么,网格背景,按钮等)绑定到返回颜色的viewModel属性。然后你可以改变颜色并调用notifypropertychanged来让UI立即更新。

如果您不清楚如何实施(2),请告诉我。