2016-06-03 4 views
1

Ich habe eine vertikale Stackpanel und ich mag es Linien-Kind mit .X2 Wert zu Eltern-Stackpanel des Actual binded enthalten. Etwas wie:Linie mit seiner selbsttätigen Längeneinstellung zu Eltern-Panel Actual Eigenschaft (Datenbindung)

StackPanel sp = new StackPanel(); 
sp.Orientation = Orientation.Vertical; 
(...) 
Line line = new Line(); 
line.X1 = 0; 
line.X2 = <Some binding to sp.ActualWidth>; 
// line.Y1 = line.Y2 - will it set it's value to 0 by default? 
line.StrokeThickness = 2; 
(...) 
sp.Children.Add(line); 

Sollte ich INotifyPropertyChanged Schnittstelle verwenden? Ist das der richtige Weg?

Antwort

0

INotifyPropertyChanged ist nicht erforderlich.

doch einfach eine Bindung und SetBinding zu X2Property der Linie erstellen.

 StackPanel sp = new StackPanel(); 
     sp.Orientation = Orientation.Vertical; 
     Line line = new Line(); 
     line.X1 = 0; 
     var bind = new Binding() 
     { 
      Source = sp, 
      Path = new PropertyPath("ActualWidth") 
     }; 
     BindingOperations.SetBinding(line, Line.X2Property, bind); 
     line.StrokeThickness = 2; 
     line.Stroke=Brushes.Black; 
     line.Margin=new Thickness(10); 
     sp.Children.Add(line); 
0

Eine Alternative zu einer Linie mit einer gebundenen X2 Eigenschaft und ein StrokeThickness von 2 wäre ein Rechteck mit einem Height von 2. Seine Breite automatisch auf die Breite Stackpanel festgelegt ist.

var sp = new StackPanel 
{ 
    Orientation = Orientation.Vertical 
}; 
... 
var line = new Rectangle 
{ 
    Height = 2, 
    Fill = Brushes.Black 
}; 
sp.Children.Add(line);