Laden...

Diagramme mit WPF

Erstellt von DiscMaster vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.229 Views
DiscMaster Themenstarter:in
316 Beiträge seit 2006
vor 13 Jahren
Diagramme mit WPF

Sers zusammen,

wie kann ich ein X-Y-Diagramm mit Skalierung und zugehörigen Teilstrichen in WPF am besten realisieren?

Die Teilstriche und die Achsenskalierung muss flexibel sein, die abstände veränderbar etc...

Ich dachte da an eine ListView, deren ItemTemplate ein einfacher strich ist und füge dann so viele items hinzu bis ich die achse so hab wie ich sie haben will... aber das wäre ziemlich mühsam, weil ich dan alles von hand berechnen müsste, z.B. wie viele striche ich brauche, die abstände dazwischen etc.

Ich brauch (erstmal) keinen Code, nur ein paar denkansätze wie man an so ein problem rangeht.

Danke, DiscMaster

"Flache Hierarchien schaffen! Das muss konkret nicht unbedingt etwas bedeuten, kommt aber immer sehr gut an."
Bernd Stromberg

297 Beiträge seit 2008
vor 13 Jahren

Ich habe neulich so etwas ähnliches gemacht und bin dabei wie folgt vorgegangen: Ich habe mir ein eigenes Control geschrieben, das im Hintergrund die Gitternetzlinien zeichnet, jeweils mit einstellbaren Eigenschaften wie x-Abstand, y-Abstand, verschieden dicke Linien, etc. insgesamt sind das etwa 100-150 Zeilen Code, also kein wirklich großer Aufwand.
Für die Kurven, die gezeichnet werden sollen, lege ich vor das Gitternetz einfach ein weiteres ItemsControl, das die Children anzeigt, beispielsweise innerhalb eines Canvas oder Grids.
Die x- und y-Achse habe ich separat erstellt und die Breite/Höhe der Einheiten über Binding mit dem Gitternetz verbunden.

Das Ganze dann noch mit Drag&Drop und sonstigen Späßen, und schon sind 1-2 Tage rum 😄

There are 10 kind of people, those who understand binary and those who don't.

DiscMaster Themenstarter:in
316 Beiträge seit 2006
vor 13 Jahren

jop, das klingt schonmal gut.

Was das Gitternetz betrifft: zeichnest du die einzelnen Gitternetzlinien von Hand, oder legst du lauter Lines einen Container?

"Flache Hierarchien schaffen! Das muss konkret nicht unbedingt etwas bedeuten, kommt aber immer sehr gut an."
Bernd Stromberg

297 Beiträge seit 2008
vor 13 Jahren

Ich habe eine Collection von Lines, die ich dann an an ContentControl binde. Die Linien selber muss man im CodeBehind dann dementsprechend anpassen, wenns ich Parameter ändern.

There are 10 kind of people, those who understand binary and those who don't.

DiscMaster Themenstarter:in
316 Beiträge seit 2006
vor 13 Jahren

der satz irritiert mich bisschen "die lines an ein contentcontrol binden" - du meinst als children hinzufügen oder richtig binden? wenn letzteres, würde mich interessieren, wie. aber ich glaube du meinst ersteres, das würde sinn ergeben 😉

"Flache Hierarchien schaffen! Das muss konkret nicht unbedingt etwas bedeuten, kommt aber immer sehr gut an."
Bernd Stromberg

328 Beiträge seit 2006
vor 13 Jahren

ich glaube er meint letzteres, was eigentlich auf ersteres hinausläuft *g

Träume nicht dein Leben sondern lebe deinen Traum.
Viele Grüße, David Teck

297 Beiträge seit 2008
vor 13 Jahren

TripleX hat recht, ist prinzipiell äquivalent 😃 Hatte mich übrigens vertan, es war ein ItemsControl, kein ContentControl. So ungefähr, aber ohne Garantie, dass es auch wirklich funktioniert, da ich es hier im Editor gebaut hab:

<Grid>
    <ItemsControl ItemsSource={TemplateBinding Gridlines}/>
    <ItemsControl ItemsSource={TemplateBinding Children}/>
</Grid>

Das erste ItemsControl bekommt die Gridlines als ItemsSource, also im Prinzip als Child-Elements, das zweite dann die Kurven oder was auch immer du darüber zeichnen möchtest. Das Ganze kannst du dann noch anpassen, je nachdem auf welchem Panel die ItemsControls basieren.

There are 10 kind of people, those who understand binary and those who don't.

DiscMaster Themenstarter:in
316 Beiträge seit 2006
vor 13 Jahren

Na, wenns nich klappt kann man noch bissl probieren, aber jetz hab ich den eingangs gefragten Denkansatz, und dafür bin ich schon sehr dankbar!

"Flache Hierarchien schaffen! Das muss konkret nicht unbedingt etwas bedeuten, kommt aber immer sehr gut an."
Bernd Stromberg