WPF dynamisch zeichnen

08/09/2009 - 09:11 von Susi | Report spam
Hallo,
ich habe folgendes Problem, ich habe ein eigenes Usercontrol -
LineShape, abgeleitet von UserControl auf Grundlage einer Linie
gebaut. Dieses hat einen Anfangs- und einen Endpunkt, die an anderen
Usercontrols kleben. Ich will jetzt folgendes erreichen, wenn ich ein
solches Usercontrol verschiebe, soll die Linie mit verschoben werden,
d.h. gestreckt oder gestaucht, im Winkel veràndert usw.. Ich hatte bei
meinen Recherchen nun schon herausbekommen, das ich depency Properties
verwenden muß. Ich habe also folgendes:

public static readonly DependencyProperty X1Property DependencyProperty.Register("X1",
typeof(double), typeof(LineShape),
new FrameworkPropertyMetadata(0.0,

FrameworkPropertyMetadataOptions.AffectsMeasure));

public double X1
{
set { SetValue(X1Property, value); }
get { return (double)GetValue(X1Property); }
}

public static readonly DependencyProperty Y1Property DependencyProperty.Register("Y1",
typeof(double), typeof(LineShape),
new FrameworkPropertyMetadata(0.0,

FrameworkPropertyMetadataOptions.AffectsMeasure));

public double Y1
{
set { SetValue(Y1Property, value); }
get { return (double)GetValue(Y1Property); }
}

public static readonly DependencyProperty X2Property DependencyProperty.Register("X2",
typeof(double), typeof(LineShape),
new FrameworkPropertyMetadata(0.0,

FrameworkPropertyMetadataOptions.AffectsMeasure));

public double X2
{
set { SetValue(X2Property, value); }
get { return (double)GetValue(X2Property); }
}

public static readonly DependencyProperty Y2Property DependencyProperty.Register("Y2",
typeof(double), typeof(LineShape),
new FrameworkPropertyMetadata(0.0,

FrameworkPropertyMetadataOptions.AffectsMeasure));

public double Y2
{
set { SetValue(Y2Property, value); }
get { return (double)GetValue(Y2Property); }
}

Gut, dann habe ich im Dragging-Bereich des Usercontrols, welches ich
verschiebe meinem LineShape die neuen Werte für den Endpunkt
mitgegeben, also z.B.
LineShape.X2 = 43;
LineShape.Y2h3;

Nun war meine Hoffnung, das das LineShape neu gezeichnet wird, aber
Fehlanzeige.
Auch ein UpdateLayout führt nicht zum Erfolg.
Zum Erfolg führt nur eine ScaleTransformation, die aber dann auch
meine Linie und die anderen Elemente mit transformiert (also dick oder
dünn macht), was ich aber nicht will.
Ich habe auch schon mit Canvas.SetLeft(LineShape,...) probiert, geht
aber auch nicht.
Was kann ich tun?
 

Lesen sie die antworten

#1 Julia M
08/09/2009 - 09:46 | Warnen spam
Hast Du schon am Stretch-Tag der Linie herumgespielt? Falls nein, dann
füge testweise mal
<Line ... Stretch="Fill" .../>
ein.

Ähnliche fragen