2016-06-30 14 views
0

Ich möchte die folgende Funktionalität implementieren.Behalten Sie die relative Position für Kind in einem WPF-Canvas bei

Ich habe eine Leinwand mit mehreren UIElements darin. Die Zeichenfläche ermöglicht das Zoomen und Scrollen unter Verwendung einer Skalierung und Transformationen.

enter image description here

Ich möchte das rote Quadrat immer in der gleichen Position halten (untere Ecke der Leinwand links), eine Floating-Steuerung zu verhalten, so wie ich den Zoom oder die Scroll zu ändern, das rote Quadrat behält immer seine Größe und Position bei. Etwas Ähnliches Karten "Earth Fenster" to google:

enter image description here

Was ist der beste Ansatz, sie umzusetzen?

HINWEIS: Ich habe versucht, die WPF adorner layer verwenden, aber es reagiert nicht auf Mausereignisse, und ich muss mit dem roten Quadrat interagieren.

+0

Setzen Sie ein anderes Bedienfeld (z. B. ein Raster) über den Canvas und fügen Sie dort das Rechteck hinzu. – Clemens

Antwort

1

Wie Clemens sagte, legen Sie es in eine andere Schicht oben. Grid kann mehrere Elemente in derselben Zelle enthalten. Erstellen Sie daher ein 1-zu-1-Raster für Ihre Leinwand und fügen Sie Inhalte wie jedes andere WPF-Layout oben hinzu. Die späteren Artikel erscheinen auf der Oberseite (es sei denn, Z Schicht angegeben):

<Grid> 
    <Canvas> 
     ... do all my fancy drawing 
    </Canvas> 
    <Rectangle VerticalAlignment="Bottom" HorizontalAlignment="Left" Width="100" Height="100" /> 
</Grid> 

Hinweis, Sie Schwierigkeiten haben kann, wenn die Leinwand alle nicht WPF-Rendering hat, wie Video oder eingebettet Windows Inhalt. Ich habe Leute gesehen, die Schwierigkeiten beim Zeichnen von WPF-Sachen haben.

Ich glaube auch, dass Sie Canvas.Bottom="20" setzen können, um die Position relativ zur unteren Kante festzulegen, aber ich habe es nie verwendet.