【问题标题】:How to Get a Color Value from App.xaml in a Page如何从页面中的 App.xaml 获取颜色值
【发布时间】: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"];

【问题讨论】:

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


    【解决方案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,这是我遇到问题的地方。
    猜你喜欢
    • 2019-11-06
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 2014-06-21
    • 2013-07-26
    • 2013-12-02
    • 1970-01-01
    • 2014-12-17
    相关资源
    最近更新 更多