【发布时间】:2017-11-02 11:47:03
【问题描述】:
我想对我的应用程序颜色进行固定枚举,即文本颜色、分隔符颜色和背景颜色,我不想每次使用时都输入相同的颜色,所以我想我可以传递对象名称(例如分隔符),然后在转换器中将其转换为所需的颜色:
这是我对IValueConverter 类的实现:
class AppColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is string)
{
var color = (string)value;
switch (color)
{
case "separator":
return Color.FromHex("c2bca8");
case "text":
return Color.FromHex("96907e");
default:
return Color.Default;
}
}
else
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
但是据我所知,我将它用于数据绑定,但我只是想将一个字符串传递给颜色属性,并由转换器处理它,我添加了一个 ResourceDictionary:
<Controls:CustomPage.Resources>
<ResourceDictionary>
<Converters:AppColorConverter x:Key="colorConverter"/>
</ResourceDictionary>
</Controls:CustomPage.Resources>
但是我怎么用,这行不通:
<Label Text="English"
VerticalOptions="CenterAndExpand"
HorizontalOptions="EndAndExpand"
TextColor="{separator, Converter=colorConverter}"/>
【问题讨论】:
-
在 ConvertBack() 中添加
return value; -
查看我的编辑以了解正确的绑定语法
-
@ZiyadGodil - ConvertBack 仅在使用 双向绑定 时需要。也就是说,如果他还需要将 Color 对象转换回十六进制字符串。做有问题的描述,这是不需要的。更重要的是,如果需要双向绑定,你肯定不做
return value;那甚至不是预期的类型。如果 Convert 执行string => Color,则 ConvertBack 将执行Color => string。
标签: c# xaml xamarin.forms ivalueconverter