Das zeichnen von Kreisen in WPF

Ich bin versucht zu schreiben, eine WPF-Anwendung, wo Sie können, zeichnen Sie Kreise auf ein Fenster, indem Sie darauf doppelklicken. Bisher habe ich diesen code:

public class ShapeAdorner : Adorner
{
    private readonly Ellipse _circle;

    public ShapeAdorner(UIElement adornedElement, Point circleCenter)
        : base(adornedElement)
    {
        _circle = new Ellipse
        {
            Width = 10,
            Height = 10,
            Stroke = Brushes.Black,
            StrokeThickness = 1.5
        };
        _circle.Margin =
            new Thickness(left: circleCenter.X, top: circleCenter.Y, right: 0, bottom: 0);
        base.AddVisualChild(_circle);
    }

    protected override Size ArrangeOverride(Size finalSize)
    {
        _circle.Arrange(new Rect(finalSize));
        return finalSize;
    }

    protected override Size MeasureOverride(Size constraint)
    {
        _circle.Measure(constraint);
        return constraint;
    }

    protected override Visual GetVisualChild(int index)
    {
        return _circle;
    }

    protected override int VisualChildrenCount
    {
        get { return 1; }
    }
}

Hier ist der client-code:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Window_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        AdornerLayer adornerLayer = AdornerLayer.GetAdornerLayer(myLabel);
        adornerLayer.Add(new ShapeAdorner(adornedElement: myLabel, circleCenter: e.GetPosition(myLabel)));
    } 
}

Den Kreisen sollen zentriert sein und an der Stelle, wo Sie einen Doppelklick auf das Fenster; aber die Kreise gezeichnet, indem der code oben zentriert unten und rechts von der Doppel-klicken Sie auf Punkt". Wie kann dies behoben werden?

EDIT: myLabel hat Height=350 und Width=525. Lassen Sie uns sagen, dass ich Doppel-klicken Sie auf den Punkt (X,Y); dann ist der Kreis wird gezeichnet bei ((350+X)/2,(525+Y)/2).

EDIT 2: Nur der Vollständigkeit halber, hier die .der xaml-Datei:

<Window x:Class="Adorners.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Adorners project" Height="350" Width="525" MouseDoubleClick="Window_MouseDoubleClick">
    <Grid>
        <Label Name="myLabel" Content="my label" Background="Red"></Label>
    </Grid>
</Window>
ist es wirklich zu weit Links? wenn Sie nicht die Kompensation für die Kreis-Dimensionen, sollte es zu weit nach rechts. wenn es wirklich zu weit nach rechts, sollten Sie die Subtraktion auf beiden Dimensionen zu verwenden, ansonsten meine awnser
Mein Fehler - ich habe korrigiert "rechts".
Dank Kent Boogaart, H. B., und aL3891 für die Beantwortung. Aber ich glaube nicht, dass du ziemlich "festgenagelt". Die Kreise werden nicht kompensiert durch eine Konstante; siehe den "EDIT" - Teil meiner Frage.

InformationsquelleAutor user181813 | 2011-06-28

Schreibe einen Kommentar