2016-12-12 111 views
0

我需要綁定顏色來填充矩形。C#WPF矩形填充綁定

XAML:

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

視圖模型:

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

結果矩形是不可見的(或者是透明的 - 這是很難說......),而不是可見和紅色。我怎樣才能擺脫這個問題?

+3

不使用'顏色'而不是使用'SolidColorBrush'。 –

+0

您是否設置了DataContext?如果你在Xaml中硬編碼顏色,你能看到矩形嗎? –

+0

@FelixD。 - 用'Brush'代替'Color'幫助:) @MartinoBordin - 是的,如果我在xaml中設置顏色,我可以看到矩形,但它不符合我的需要 - 顏色必須動態變化。不,我不會在這個「矩形」中設置數據上下文。 –

回答

3

Rectangle.Fill(它從Shape繼承)是Brush,而不是Color。因此,讓你的財產,而不是Brush

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

可能有其他的問題,但你需要首先解決這一問題之一。

+0

謝謝 - 它的工作,並沒有更多的問題......到目前爲止:) –

+1

@JaroslawMatlak「迄今爲止沒有更多的問題」是我們在這個球拍上所能說的最好的。祝你好運! –

4

另一種方法就是使用ColorToBrushConverter,就像下面這樣:

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; 
     } 
} 

然後在XAML定義轉換爲資源,並使用它像這樣:

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