2016-12-12 39 views
0

矩形を塗りつぶすには色をバインドする必要があります。C#WPF Rectangle塗りつぶし

XAML:

<Rectangle Fill="{Binding Colorr}" 
      VerticalAlignment="Center" 
      Height="3" Width="16" 
      Margin="3, 1, 5, 0" 
      Visibility="Visible"/> 

のViewModel:

public ItemViewModel() 
{ 
    Colorr = Colors.Red;; 
} 
public Color Colorr 
{ 
    get { 
     return color; } 
    set 
    { 
     color = value; 
     NotifyOfPropertyChange(() => Colorr); 
    } 
} 

結果の矩形が表示されていない(または透明である - 言うのは難しいです...)の代わりに、可視および赤であることの。どうすればこの問題を取り除くことができますか?

+3

使用していません '代わりに 'SolidColorBrush'を使います。 –

+0

DataContextを設定しましたか? Xamlで色をハードコードすると、長方形が見えますか? @FelixD。 –

+0

- 代わりに 'Brush'を使用する' Color'は助けました:) @MartinoBordin - はい、xamlで色を設定すると長方形が見えますが、それは私のニーズに合わない - 色は動的に変更する必要があります。いいえ、私はこの「矩形」にデータコンテキストを設定しません。 –

答えて

3

Rectangle.Fill(これはShapeから継承)は、Colorではなく、Brushです。だから、あなたの財産代わりBrushます

private Brush _colorr = Brushes.Red; 
public Brush Colorr 
{ 
    get 
    { 
     return _colorr; 
    } 
    set 
    { 
     _colorr = value; 
     NotifyOfPropertyChange(() => Colorr); 
    } 
} 

は、他の問題があるかもしれませんが、あなたは最初にこれを修正する必要があります。

+0

ありがとうございます - それは動作し、それ以上の問題はありません...これまでのところ:) –

+1

@JaroslawMatlak "これ以上の問題はこれまでありませんでした"とは、このラケットでは最高のものです。がんばろう! –

4

他の方法は、周りのすぐ下に1のように、ColorToBrushConverterを使用することです:リソースとしてコンバータを定義し、このようにそれを使用するXAMLに続いて

using System.Windows.Data; 
using System.Windows.Media; 

public class ColorToBrushConverter : IValueConverter 
{ 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      return new SolidColorBrush((Color)value); 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      return (value as SolidColorBrush).Color; 
     } 
} 

<Rectangle Fill="{Binding Colorr, Converter={StaticResource ColorToBrushConverter}}"/>