あなたのMaddoColorConverter
に多くのチェックを追加する必要があります。
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からいくつかの関連するスニペットがあります。たとえば、バインディングが失敗した場合、WPFはDependencyProperty.UnsetValue
をコンバーターに渡します。あなたのコンバータはこのケースをチェックするのではなく、単に文字列に渡されたものを変換します。何らかの理由でそれが予想される場合
public class MaddoColorConverter : IValueConverter {
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
Color color = Colors.Black;
if (value != null && value != DependencyProperty.UnsetValue && value is string && !String.IsNullOrWhiteSpace((string) value)) {
string c = (string) value;
object convertedColor = null;
try {
convertedColor = ColorConverter.ConvertFromString(c);
}
catch (Exception ex) {
throw new FormatException($"String {c} does not represent a valid color", ex);
}
if (convertedColor != null) {
color = (Color) convertedColor;
}
}
return color;
}
}
:あなたのコンバータは、この(に修正が必要な場合がありますどのConvertBack
に手を触れないが、それはこの質問には関係ありませんでしたが、私は唯一のConvert
方法を更新しました注意してください)のように変更しますデザイン時に無効な色の値があります。次のように、デザイン時に例外をスローしないでください。
private static readonly DependencyObject _dummy = new DependencyObject();
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
System.Windows.Media.Color color = Colors.Black;
if (value != null && value != DependencyProperty.UnsetValue && value is string && !String.IsNullOrWhiteSpace((string) value)) {
string c = (string) value;
object convertedColor = null;
try {
convertedColor = ColorConverter.ConvertFromString(c);
}
catch (Exception ex) {
if (!DesignerProperties.GetIsInDesignMode(_dummy)) {
throw new FormatException($"String {c} does not represent a valid color", ex);
}
}
if (convertedColor != null) {
color = (Color) convertedColor;
}
}
return color;
}
出典
2017-03-20 09:33:36
Evk
ColoreTestoRGBソースプロパティの種類は何ですか?これは、例えば "#000"のようにColorConverterが実際に理解できる有効な値である必要があります。 – mm8
これは文字列プロパティで、適切な値の辞書を検索するか、デフォルト値を返します。 public string ColoreTestoRGB { get {return PicSettings.GetString( "coloreTestoRGB"); } セット { PicSettings.Set( "coloreTestoRGB"、value); RaisePropertyChanged( "ColoreTestoRGB"); } } – MaddoScientisto
明らかに、例外が発生することなく、文字列 "ColoreTestoRGB"をコンバーターのColorConverter.ConvertFromStringメソッドに渡すことはできません。 – mm8