如何从页面中的 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"/>

【讨论】:

我发现问题后,您一定已经添加了这个。我实际上使用了&lt;SolidColorBrush x:Key="ThemeBrushBlue" Color="#FF235591"/&gt;,因为在设置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 获取颜色值的主要内容,如果未能解决你的问题,请参考以下文章

xaml - 如何更改应用程序中所有文本的颜色

从线性渐变颜色值获取背景颜色

使用扩展脚本(javascript)如何从 Photoshop 颜色表中获取颜色值

如何从颜色变量中获取 RGB 值

Scss中的颜色函数

java中如何从Color属性字符串中获取颜色Color