【发布时间】:2017-03-20 09:22:12
【问题描述】:
我做了一个从字符串到颜色并返回的转换器,它在运行时工作正常,但在编辑器上它只是抛出“令牌无效”。错误并阻止编辑器出现,真的很烦人,因为它阻止我使用可视化编辑器。
我使用扩展的 WPF 工具包为 ColorPicker 制作了转换器。
这是转换器代码:
public class MaddoColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
Color color = Colors.Black;
if (value != null && !string.IsNullOrWhiteSpace(value.ToString()))
{
string c = value.ToString();
var convertedColor = ColorConverter.ConvertFromString(c);
if (convertedColor != null)
{
color = (Color) convertedColor;
}
}
return color;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null)
{
Color color = (Color)value;
Debug.WriteLine(color.ToString());
return color.ToString();
}
return string.Empty;
}
}
这里有一些来自 xaml 格式的相关 sn-ps:
<Window.Resources>
<wpfCatalog:MaddoColorConverter x:Key="ColorConverter" />
</Window.Resources>
<xctk:ColorPicker Grid.Row="3" Grid.Column="2" SelectedColor="{Binding ColoreTestoRGB, Converter={StaticResource ColorConverter}}"/>
【问题讨论】:
-
ColoreTestoRGB 源属性的类型是什么,它返回什么值?这需要是 ColorConverter 实际理解的有效值,例如“#000”。
-
它是一个字符串属性,它在字典中查找正确的值或返回一个默认的公共字符串 ColoreTestoRGB { get { return PicSettings.GetString("coloreTestoRGB"); } set { PicSettings.Set("coloreTestoRGB", value); RaisePropertyChanged("ColoreTestoRGB"); } }
-
显然您不能将字符串“ColoreTestoRGB”传递给转换器中的 ColorConverter.ConvertFromString 方法而不会出现异常。
标签: c# wpf xaml ivalueconverter wpf-extended-toolkit