WPF kullanarak bir çizim programında bir Çizgi için bir Adorner üzerinde çalışıyorum. Hat, kod arkasında çizilir ve daha sonra LineAdorner
adlı özel Adorner'imle süslenir. Hattın başlangıç ve bitiş noktası için Thumb
kullanmayı başardım. Benim problemim, Başlangıcın başlangıç ve bitiş noktaları ile ilgili düzenlemesi. Problemin, Thumbs'i başlangıç ve bitiş noktaları ile ayarlaması gereken ArrangeOverride
yönteminde olduğunu düşünüyorum. Rect
X
ve Y
parametrelerinde çıkarma veya ekleme için doğru miktarı bulamıyorum. Thumbs'ı daima çizginin noktaları ile düzenlemek için bu değerleri nasıl bulabilirim? benim özel Adorner kod şudur:WPF özel bir Hattında Çizgi ile Başlama nasıl düzenlenir Adorner
public class LineAdorner : Adorner
{
private Point start;
private Point end;
private Thumb startThumb;
private Thumb endThumb;
private Line selectedLine;
private VisualCollection visualChildren;
// Constructor
public LineAdorner(UIElement adornedElement) : base(adornedElement)
{
visualChildren = new VisualCollection(this);
startThumb = new Thumb { Cursor = Cursors.Hand, Width = 10, Height = 10, Background = Brushes.Green };
endThumb = new Thumb { Cursor = Cursors.Hand, Width = 10, Height = 10, Background = Brushes.BlueViolet };
startThumb.DragDelta += StartDragDelta;
endThumb.DragDelta += EndDragDelta;
visualChildren.Add(startThumb);
visualChildren.Add(endThumb);
selectedLine = AdornedElement as Line;
}
// Event for the Thumb Start Point
private void StartDragDelta(object sender, DragDeltaEventArgs e)
{
Point position = Mouse.GetPosition(this);
selectedLine.X1 = position.X;
selectedLine.Y1 = position.Y;
}
// Event for the Thumb End Point
private void EndDragDelta(object sender, DragDeltaEventArgs e)
{
Point position = Mouse.GetPosition(this);
selectedLine.X2 = position.X;
selectedLine.Y2 = position.Y;
}
protected override int VisualChildrenCount { get { return visualChildren.Count; } }
protected override Visual GetVisualChild(int index) { return visualChildren[index]; }
protected override void OnRender(DrawingContext drawingContext)
{
if (AdornedElement is Line)
{
selectedLine = AdornedElement as Line;
start = new Point(selectedLine.X1, selectedLine.Y1);
end = new Point(selectedLine.X2, selectedLine.Y2);
}
}
protected override Size ArrangeOverride(Size finalSize)
{
var startRect = new Rect(selectedLine.X1, selectedLine.Y1, ActualWidth, ActualHeight);
startThumb.Arrange(startRect);
var endRect = new Rect(selectedLine.X2, selectedLine.Y2, ActualWidth, ActualHeight);
endThumb.Arrange(endRect);
return finalSize;
}
}
mükemmel çalışıyor, yardımınız için teşekkürler, bu tam olarak aradığım şeydi. – canha