我有一个静态类,其中包含静态定义的HEX颜色值:
namespace Namespace1
{
public static class MyColors
{
public const string COLOR_1 = "#AABBCC";
// ...
}
}
我希望在资源字典中定义所有这些颜色,以便它们可以在XAML中使用:
<ResourceDictionary xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Namespace2.Style.Colors"
xmlns:n1="clr-namespace:Namespace1;assembly=Assembly1">
<Color x:Key="Color1" x:FactoryMethod="FromHex">
<x:Arguments>
<x:String>{x:Static n1:MyColors.COLOR_1}</x:String>
</x:Arguments>
</Color>
<!-- ... -->
</ResourceDictionary>
但这似乎不起作用。没有编译错误,但颜色本身为空(透明)。
如果我将{x:Static n1:MyColors.COLOR_1}
部分替换为实际的#AABBCC
值,那么它就能正常工作。
我还测试了{x:Static n1:MyColors.COLOR_1}
部分(使用Label和Text属性)并且它可以正常工作。
那么这里有什么问题?这似乎是一个内部的Xamarin.Forms错误。
答案 0 :(得分:1)
问题本身并未解决,但找到了我试图实现的解决方案:
因此,不是在Colors.xaml
文件中声明颜色,而是可以使用Colors.xaml.cs
方法在Add
文件中声明它们:
namespace Namespace2.Style
{
public partial class Colors : ResourceDictionary
{
public Colors()
{
InitializeComponent();
Add("Color1", Color.FromHex(MyColors.COLOR_1));
// ...
}
}
}
答案 1 :(得分:1)
好吧,忘了类型转换器。我得到了这样的工作:
<SolidColorBrush x:Key="Color1" Color="{Binding Source={x:Static n1:MyColors.COLOR_1}}" />
这是你的另类选择吗?
答案 2 :(得分:0)
如果您有时间使用类型转换器测试解决方案:
namespace Namespace1
{
using System.ComponentModel;
using System.Windows.Media;
public static class MyColors
{
[TypeConverter(typeof(ColorConverter))]
public static string COLOR_1 { get; } = "#AABBCC";
}
}
答案 3 :(得分:0)
名为namespace MyNamespace
{
public static class MyColors
{
public const string Blue = "#AABBCC";
}
public static class MyColor
{
public static Color MyBlue { get { return Color.FromHex(MyColors.Blue); } }
}
}
的程序集中的类:
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:c="clr-namespace:MyNamespace;assembly=MyAssembly"
...
<Label Text="MyColor.MyBlue example" TextColor="{x:Static c:MyColor.MyBlue}"/>
XAML:
c
请注意,myColor
命名空间可能会被命名为例如myColor:MyColor.MyBlue
以便更好地识别它。标签中的符号将为HWND
。