2016-12-12 3 views
0

Ich muss Farbe binden, um das Rechteck zu füllen.C# WPF Rechteck Fill Binding

XAML:

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

Ansichtsmodell:

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

Das resultierende Rechteck nicht sichtbar ist (oder ist transparent - es ist schwer zu sagen, ...) statt sichtbar und rot zu sein. Wie kann ich dieses Problem lösen?

+3

nicht verwenden ' Verwenden Sie stattdessen "SolidColorBrush". –

+0

Haben Sie den DataContext festgelegt? Wenn Sie die Farbe in Xaml fest codieren, können Sie das Rechteck sehen? –

+0

@FelixD. - Verwendung von 'Brush' anstelle von' 'Color' half: @MartinoBordin - ja, wenn ich die Farbe in XAML setze kann ich das Rechteck sehen, aber es passt nicht zu meinen Bedürfnissen - die Farbe muss dynamisch geändert werden. Nein, ich setze den Datenkontext in diesem Rechteck nicht. –

Antwort

3

Rectangle.Fill (die er erbt von Shape) ist ein Brush, kein . So Ihre Immobilie machen eine Brush statt:

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

Es können auch andere Probleme sein, aber Sie müssen zuerst diese beheben.

+0

Danke - es funktioniert und es gibt keine Probleme mehr ... so weit :) –

+1

@JaroslawMatlak "No more problems so weit" ist das Beste, was jeder von uns jemals in diesem Racket sagen kann. Viel Glück! –

4

Der andere Weg ist um ColorToBrushConverter zu bedienen, einfach wie unten:

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

dann in XAML definieren den Konverter als Ressource und verwenden Sie es wie folgt aus:

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