2017-11-20 19 views
1

WindowsユニバーサルアプリケーションでカスタムColorクラスを定義しました。私はこのタイプのプロパティをValueConverterを使ってColorPickerに私のViewModelViewModel.ModelColor)バインドしたいと思います。残念ながら、それは動作しません。これは私が持っているものです。ColorPickerコンバータでのUWP COM例外

XAML

<ColorPicker Color="{Binding ModelColor, Converter={StaticResource ColorConverter}, Mode=TwoWay}" /> 

私はそれを実行すると、それが言うラインにスロー

public class ColorConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, string language) 
     { 
      if (value == null) 
      { 
       return default(Color); 
      } 

      var c = (Color) value; 
      return Windows.UI.Color.FromArgb(c.A, c.R, c.G, c.B); 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, string language) 
     { 
      var c = (Windows.UI.Color) value; 
      return new Color(c.A, c.R, c.G, c.B); 
     } 
    } 

コンバータ:

var c = (Windows.UI.Color) value; 

をこれは例外です:

enter image description here

何が起こっていますか?私はWindows.UI.Colorvalueに受け取るはずです!

EDIT:私は "value.GetType()"を検査しました。これは私が得ているものです。あまりにも奇妙です!

enter image description here

+0

私は間違った答えを削除しました。非常に奇妙な。コンバータをまったく使用しないとどうなりますか? –

+0

UWPプロジェクトにこの新しいコントロールを追加する予定があるので、私は不思議です。 –

+1

問題を作り出すために最小限のコードでゼロから新しいソリューションを作成しました。はい、それはコントロールのバグだと思われます。私はすでにここに投稿しています:https://github.com/MicrosoftDocs/windows-uwp/issues/247注意を喚起するために投票してください。ありがとう! – SuperJMN

答えて

0

ここで私は仕事にこれを得た方法は次のとおりです。

public Color SelectedColor 
{ 
    get { return ColorFromText(SelectedColorAsText); } 
    set 
    { 
     String newColorAsText; 

     newColorAsText = TextFromColor(value); 

     if (newColorAsText != SelectedColorAsText) 
     { 
      SelectedColorAsText = newColorAsText; 
      OnPropertyChanged(nameof(SelectedColor)); 
     } 
    } 
} 

public String SelectedColorAsText { get; set; } 

private Color ColorFromText(String text) 
{ 
    Byte a, r, g, b; 

    a = Byte.Parse(text.Substring(1, 2), System.Globalization.NumberStyles.AllowHexSpecifier); 
    r = Byte.Parse(text.Substring(3, 2), System.Globalization.NumberStyles.AllowHexSpecifier); 
    g = Byte.Parse(text.Substring(5, 2), System.Globalization.NumberStyles.AllowHexSpecifier); 
    b = Byte.Parse(text.Substring(7, 2), System.Globalization.NumberStyles.AllowHexSpecifier); 

    return Color.FromArgb(a, r, g, b); 
} 

private String TextFromColor(Color color) 
{ 
    return color.ToString(); 
} 

(私は任意に私の内部表現は"#AARRGGBB"なることを選択した。)

次に、XAMLで、「ColorPickerをバインドs Colorプロパティを使用して{x:Bind}

Color="{x:Bind Path=SelectedColor, Mode=TwoWay}" 

{Binding}をご利用の場合は、に変換されないSystem.__ComObjectに関する素晴らしいExceptionが届きます。

関連する問題