在Xamarin.Forms XAML中定义颜色而没有“类型'颜色'不支持直接内容”

时间:2018-11-24 00:38:00

标签: xaml xamarin.forms

Xamarin文档和博客中有很多地方(here's one,甚至docs都没有涵盖这个问题),它们引用了ResourceDictionary中的颜色定义,看起来像这样:

<Application.Resources>
    <ResourceDictionary>
        <Color x:Key="backgroundColor">#33302E</Color>
        <Color x:Key="textColor">White</Color>
    </ResourceDictionary>
</Application.Resources>

但是,这似乎是个老新闻,因为如果您现在尝试尝试,则会遇到编译错误- The type 'Color' does not support direct content

当前规范似乎是使用FactoryMethod(如FromHsla)并传递数字颜色参数。但是,目前是否存在使用XAML在Color中定义Red键(按名称,理想情况下,像ResourceDictionary一样)的简洁语法?

2 个答案:

答案 0 :(得分:0)

如果您通过ResourceDictionary定义颜色,则只能用十六进制(有或没有alpha通道)声明颜色,枚举颜色实际上是通过Color class上的代码定义的,您可以创建颜色这样列出

namespace YourNamespace
{
    public static class Colors
    {
        public statis Color BackgroundColor = Color.FromHex("#33302E");

        ...
    }
}

答案 1 :(得分:-1)

您需要尝试“ SolidColorBrush”无法直接设置颜色。如下所示。

 <!--#region  COLORS-->
<SolidColorBrush x:Key="SCBCement" Color="#FF3B6983"/>
<SolidColorBrush x:Key="SCBOrange" Color="#FFFFAC48"/>
<SolidColorBrush x:Key="SCBLightGrey" Color="#FF3C3C3C"/>
<SolidColorBrush x:Key="SCBLightBrown" Color="#FF933A3A"/>
<SolidColorBrush x:Key="SCBYes" Color="#FF10BD10"/>
<SolidColorBrush x:Key="SCBNo" Color="#FFBD2010"/>
<!--#endregion-->

然后按如下所示使用它:

<ListView ItemContainerStyle="{StaticResource StyleListViewItem}" Background="{x:Null}" BorderBrush="{x:Null}" ItemsSource="{Binding Value}" Foreground="{StaticResource SCBCement}">