[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
答案 0 :(得分:1)
StaticResource
时, ThemeResource
和DynamicResource
不支持动态更改。顺便说一句,如果您重新加载视图,例如前后导航,您可以看到更改,但这不是一个好的解决方案。
另一方面,您可以使用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);