Ich arbeite in C# -WPF.Eigenschaft in UserControl neu bewerten
Ich habe mein eigenes UserControl, ein einfaches Kreuz. Mit Koordinaten kann ich ein X auf ein Bild zeichnen.
Parameter sind:
- Centerpoint: Zentrum für die Quer
- Vordergrund: Farbe für das Quer
- Dicke: Dicke für die Quer
Mein Cross.xaml:
<UserControl x:Name="userControl"
x:Class="Project.Cross">
<Grid>
<Line Stroke="{Binding Foreground, ElementName=userControl}"
StrokeThickness="{Binding Thickness, ElementName=userControl}"
X1="{Binding X1, ElementName=userControl, Mode=OneWay}"
X2="{Binding X2, ElementName=userControl, Mode=OneWay}"
Y1="{Binding Y1, ElementName=userControl, Mode=OneWay}"
Y2="{Binding Y2, ElementName=userControl, Mode=OneWay}" />
<Line Stroke="{Binding Foreground, ElementName=userControl}"
StrokeThickness="{Binding Thickness, ElementName=userControl}"
X1="{Binding X2, ElementName=userControl, Mode=OneWay}"
X2="{Binding X1, ElementName=userControl, Mode=OneWay}"
Y1="{Binding Y1, ElementName=userControl, Mode=OneWay}"
Y2="{Binding Y2, ElementName=userControl, Mode=OneWay}"/>
</Grid>
</UserControl>
Mein Cross.xaml.cs:
public partial class Cross : UserControl
{
public Cross()
{
InitializeComponent();
}
public readonly static DependencyProperty CenterPointProperty = DependencyProperty.Register("CenterPoint",
typeof(PointF), typeof(Cross),
new PropertyMetadata(default(PointF)));
public PointF CenterPoint
{
get { return (PointF)GetValue(CenterPointProperty); }
set { SetValue(CenterPointProperty, value); }
}
public readonly static DependencyProperty ThicknessProperty = DependencyProperty.Register("Thickness",
typeof(int), typeof(Cross),
new PropertyMetadata(2));
public int Thickness
{
get { return (int)GetValue(ThicknessProperty); }
set { SetValue(ThicknessProperty, value); }
}
public float X1
{
get
{
return (float)(CenterPoint.X - (Width/2));
}
}
public float X2
{
get
{
return (float)(CenterPoint.X + (Width/2));
}
}
public float Y1
{
get
{
return (float)(CenterPoint.Y - (Height/2));
}
}
public float Y2
{
get
{
return (float)(CenterPoint.Y + (Height/2));
}
}
}
Ich kann es nennen mag:
<local:Cross CenterPoint="{Binding Point}" Thickness="8" Foreground="Yellow" Height="40" Width="40"/>
Ich habe ein Problem, das Kreuz wird nicht angezeigt. Ich habe Haltepunkte hinzugefügt, es scheint, dass die Werte X1, X2, ... nicht aktualisiert werden, wenn ich den CenterPoint ändere. Wie kann ich C# erzwingen, diese Werte neu zu bewerten? (Hoffen, das ist mein Problem zu lösen)
Danke
Können Sie das Xaml zeigen, in dem das local: Cross definiert ist? ZB was ist darin enthalten? –
Ich verstehe deine Frage nicht. Ich habe die Datei Cross.xaml gezeigt, wo ich das UserControl 'Cross' in meinem lokalen Namensraum definiere. –
Ich wundere mich nur, warum Sie nicht das Kreuz als eine feste Größe basierend auf Breite und Höhe des Benutzersteuerelements zeichnen und dann das Objekt um das, was Sie gerade zeichnen, bewegen, indem Sie seine Position relativ zum Zielobjekt festlegen. Also habe ich mich gefragt, was du da draus machst. –