2016-10-18 1 views
0

Ich bin neu in der StackOverflow Community und bitte entschuldige mein schlechtes Englisch, ich versuche es zu verbessern.Erstellen und Zugreifen auf eine GeometryGroup in CodeBehind

Ich benutze deine Hilfe für meine Bachelorarbeit und du hast mir schon sehr geholfen, danke. Ich schreibe ein Werkzeug, um Daten in drahtlosen Netzwerken zu visualisieren.

Ich füge eine GeometryGroup zu meinem Canvas hinzu, um einige meiner CustomControls mit einer Linie zu verbinden. Die Zeile wird aktualisiert, wenn das Steuerelement verschoben wird usw. Ich habe den folgenden Artikel verwendet: https://denisvuyka.wordpress.com/2007/10/21/wpf-diagramming-drawing-a-connection-line-between-two-elements-with-mouse/, damit es funktioniert.

Dies ist der Code, den ich in meinem XAML verwende.

Was ich versuche zu tun ist, meine eigene Canvas-Klasse zu erstellen und fügen Sie die GeometryGroup in den Code dahinter. Was ich versuchte zu tun war:

System.Windows.Shapes.Path pathGroup= new System.Windows.Shapes.Path(); 
BrushConverter bc = new BrushConverter(); 
Brush Brush = (Brush)bc.ConvertFrom("#FF132FE0"); 
cmp.Stroke = Brush; 
cmp.StrokeThickness = 1; 
GeometryGroup connectors= new GeometryGroup(); 
pathGroup.Data=connectors; 

Mein Problem ist, dass es nicht wie vorgesehen funktioniert hat. Mit der XAML-Implementierung kann ich einfach Folgendes verwenden:

connectors.Children.Add(obj); 

Ich versuche, mein Problem zusammenzufassen. Ich möchte mit C# -Code eine GeometryGroup erstellen, um Linien hinzufügen und entfernen zu können, wann immer ich will.

Danke =)

+0

Sie wahrscheinlich nie überall verwenden 'pathGroup' im Canvas. – Clemens

+0

Wie kann ich auf die Kinder von pathGroup zugreifen? Es gibt kein solches Attribut wie Children of GetChildren oder Data.Children. Ich weiß nicht einmal, wie ich auf die Linien zugreifen kann, die ich zur GeometryGroup hinzufüge. Vielleicht ist das mein Problem. –

+0

Sie müssen nicht auf die untergeordneten Elemente von pathGroup zugreifen. Wie zuvor würden Sie auf die Children-Eigenschaft von 'connectors' zugreifen. Sie müssten * jedoch * pathGroup zur Canvas-Children-Auflistung hinzufügen. – Clemens

Antwort

0

Sie könnten eine abgeleitete Leinwand mit einem connectors Feld (ähnlich dem von der in Ihrer Frage gezeigt XAML erstellt haben wollen).

Das Canvas würde die Anschlüsse mittels einer überschriebenen OnRender Methode zeichnen, wie unten gezeigt.

public class CustomCanvas : Canvas 
{ 
    private readonly GeometryGroup connectors = new GeometryGroup(); 

    protected override void OnRender(DrawingContext dc) 
    { 
     var stroke = new SolidColorBrush(Color.FromRgb(0x13, 0x2F, 0xE0)); 

     dc.DrawGeometry(null, new Pen(stroke, 1), connectors); 

     base.OnRender(dc); 
    } 
} 

Einige zusätzliche Code in einem anderen Verfahren der Canvas-Klasse abgeleitet würde jetzt Geometrie Objekte zu/von der Children Sammlung des connectors Objekts hinzufügen oder entfernen.


Sie könnten natürlich wollen auch Eigenschaften für den Stecker des Stroke erklären, StrokeThickness usw.

+0

Es ist etwas, das ich versuchen werde zu implementieren! Es ist viel sauberer, diese Funktion zu implementieren. –

Verwandte Themen