如何从页面中的 App.xaml 获取颜色值
Posted
技术标签:
【中文标题】如何从页面中的 App.xaml 获取颜色值【英文标题】:How to Get a Color Value from App.xaml in a Page 【发布时间】:2013-12-09 05:24:04 【问题描述】:我已经声明了我将在我的应用程序中大量使用的颜色,并且我希望能够在页面中调用该特定颜色。这种颜色很可能会在 XAML 以及后面的代码中使用。在 App.xaml 我有
<Color x:Name="Blue" A="255" R="35" G="85" B="145"/>
但是我如何在我的主页的 UI 和代码中调用它呢?
其实要注意,上面在App.xaml中设置颜色会在启动时出现调试错误?
public App()
// Standard XAML initialization
InitializeComponent(); //XamlParseException occurs here
...
编辑**
SolidColorBrush 更新不起作用
我在 XAML 中声明了一个 Slider 控件和两个 ToggleSwitch 控件,我希望在 XAML 中更改 Slider 前景并在后面的代码中更改 ToggleSwitch 控件。两者都不起作用
App.xaml
<Color x:Key="ThemeColorBlue" A="255" R="35" G="85" B="145"/>
<SolidColorBrush x:Key="ThemeBrushBlue" Color="StaticResource ThemeColorBlue"/>
因此,当尝试更改 XAML 中的 Slider 控件前景时,我没有收到任何错误
Foreground="StaticResource ThemeBrushBlue"
但是在后面的代码中更改 ToggleSwitch 前景时,我收到一条错误消息,指出 Cannot implicitly convert type 'object' to 'System.Windows.Media.Brush'
this.ToggleSwitch.SwitchForeground = Application.Current.Resources["ThemeBrushBlue"];
【问题讨论】:
【参考方案1】:您通常会使用Key
而不是Name
将颜色添加到Application.Resources
:
<Application.Resources>
<Color x:Key="Blue" A="255" R="35" G="85" B="145"/>
</Application.Resources>
现在您可以在 XAML 中以 StaticResource
的形式访问它,例如:
<SolidColorBrush Color="StaticResource Blue"/>
或在这样的代码中:
var color = (Color)Application.Current.Resources["Blue"];
【讨论】:
我在实施您的解决方案时遇到了问题。我在上面的原始问题中添加了一个编辑,也许你可以看看并提供一些建议? 错误消息无法将类型'object'隐式转换为'System.Windows.Media.Brush'说明了一切。表达式Application.Current.Resources["ThemeBrushBlue"]
返回 object
,但 ToggleSwitch.SwitchForeground
需要 Brush
。您必须添加一个明确的演员表(就像我在回答中所做的那样):ToggleSwitch.SwitchForeground = (Brush)Application.Current.Resources["ThemeBrushBlue"];
【参考方案2】:
我认为问题是
<SolidColorBrush x:Key="ThemeBrushBlue" Color="StaticResource ThemeColorBlue"/>
只需重复颜色,它应该可以工作:
<SolidColorBrush x:Key="ThemeBrushBlue" Color="#235591"/>
【讨论】:
我发现问题后,您一定已经添加了这个。我实际上使用了<SolidColorBrush x:Key="ThemeBrushBlue" Color="#FF235591"/>
,因为在设置Color
时,文本255
上有一个初始化错误。我将如何在后面的代码中使用它?为 ToggleSwitch 设置 Application.Current.Resources["ThemeBrushBlue"]
会导致类型 Object to Brush 错误。
您需要进行演员表:this.ToggleSwitch.SwitchForeground = (SolidColorBrush)Application.Current.Resources["ThemeBrushBlue"]
,但在 XAML 中更容易做到SwitchForeground ="StaticResource ThemeBrushBlue"
谢谢,我相信我明白了。 ToggleSwitch
Foreground 属性尤其需要Brush
类型的转换,而不是SolidColorBrush
,这是我遇到问题的地方。以上是关于如何从页面中的 App.xaml 获取颜色值的主要内容,如果未能解决你的问题,请参考以下文章