Wo fange ich an, ein benutzerdefiniertes Steuerelement zu entwerfen, das untergeordnete Objekte enthält?

StackOverflow https://stackoverflow.com/questions/49562

  •  09-06-2019
  •  | 
  •  

Frage

Ich denke, das ist eine unterhaltsame Frage auf technischer Ebene.

Ich muss ein Steuerelement entwerfen, das ein Liniendiagramm anzeigt.Ich möchte in der Lage sein, mithilfe eines Designers mehrere hinzuzufügen Pens die tatsächlich die Daten und die Präsentation beschreiben, sodass am Ende Xaml etwas in dieser Richtung ergibt:

<Chart>
  <Pen Name="SalesData" Color="Green" Data="..."/>
  <Pen Name="CostData" Color="Red" Data="..." />
  ...
</chart>

Mein erster Gedanke ist, zu verlängern ItemsControl für die Chart Klasse.Bringt mich das dahin, wohin ich will, oder sollte ich es aus einer anderen Richtung betrachten, beispielsweise aus der Erweiterung? Panel?

Die Hauptanforderung besteht darin, es in einem Designer verwenden zu können, ohne C#-Code hinzuzufügen.Damit das überhaupt möglich ist, muss es seine Struktur im Baumansichtsmodell beibehalten.Mit anderen Worten: Wenn ich damit in Expression Blend oder Mobiform Aurora arbeiten würde, könnte ich das Diagramm aus dem logischen Baum auswählen oder einen der einzelnen Stifte auswählen, um deren Eigenschaften zu bearbeiten.

War es hilfreich?

Lösung

Ich würde Chart als ItemsControl verwenden und sein ItemsPanel als Canvas (für eine leichte Verwendung würde ich Grid als ItemsPanel verwenden).Und jeder Stift ist ein von der PolyLine-Klasse abgeleitetes CustomControl.Macht das irgendeinen Sinn?

Andere Tipps

Für diejenigen, die unter dem Gesichtspunkt der persönlichen Entwicklung (wie in der ursprünglichen Frage angegeben) daran interessiert sind, ihre eigene Kontrolle zu erlangen, würde ich eine Struktur in diesem Format vorschlagen.

<Chart>
  <Chart.Pens>
    <Pen Name="SalesData" Data="{Binding Name=SalesData}" />        
    <Pen Name="CostData">
      <Pen.Data>
        <PenData Y="12" X="Jan" />
        <PenData Y="34" X="Feb" />
      </Pen.Data>
    </Pen>
  </Chart.Pens>
</Chart>

Dazu müssen Sie eine Pens-Sammlung im Benutzersteuerelement verfügbar machen (ich würde dies nicht als abgeleitetes ItemsControl-Steuerelement betrachten).Dieses abgeleitete Benutzersteuerelement kapselt andere Steuerelemente, typischerweise ein Raster zum Platzieren einer Beschriftung für die Überschrift, Beschriftungen für die Achsennamen, möglicherweise eine Leinwand für den Zeichenbereich und ein ItemsControl zum Anzeigen der Elemente in der Legende.


Für diejenigen, die eine sofort einsatzbereite Lösung suchen

Für diejenigen, die nach einer sofort einsatzbereiten Lösung suchen, würde ich mir CodePlex ansehen VisiFires WPF-Diagrammsteuerung.Es ist WPF- und Silverlight-kompatibel und verfügt sogar über eine Silverlight-App damit Sie Ihre Daten und Ihren Stil eingeben und XAML (oder HTML) generieren lassen, um es in Ihre Anwendung einzufügen.

Eine weitere Möglichkeit besteht darin, Canvas für das Diagramm und Shape für die Stifte zu erweitern.Zeichnen Sie dann die Form dynamisch basierend auf den Farb-/Dateneigenschaften.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top