We're sorry but this page doesn't work properly without JavaScript enabled. Please enable it to continue.
Feedback

01.05_06 Datenstrukturen, WPF

00:00

Formal Metadata

Title
01.05_06 Datenstrukturen, WPF
Title of Series
Number of Parts
54
Author
License
CC Attribution - NonCommercial - ShareAlike 3.0 Germany:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal and non-commercial purpose as long as the work is attributed to the author in the manner specified by the author or licensor and the work or content is shared also in adapted form only under the conditions of this
Identifiers
Publisher
Release Date
Language
Producer

Content Metadata

Subject Area
Genre
Data structureMathematical structureQueue (abstract data type)Structural load.NET FrameworkKlassenbibliothekDiagram
Queue (abstract data type)ZahlIntegerData structureNumberLengthListe <Informatik>Computer fileObject (grammar)LinieSocial classPropositional formulaEckeVECTOR <Programm>.NET FrameworkKlassenbibliothekFunction (mathematics)Template (C++)C++Generating functionC sharpEllipseStreckeCountingComputer animation
Sound effectSocial classStylus (computing)LengthLinieAlgebraic closureObject (grammar)Canvas <Programm>Slide ruleTraverse (surveying)ZahlSystems <München>RadiusEckeGRADEInternet forumAktion <Informatik>Programmer (hardware)Real-time operating systemVideo cardComputer animationWINDOWS <Programm>Gebiet <Mathematik>Computer animation
LinieVideo cardSound effectComputer animationInterface (chemistry)Computer animation
Transcript: German(auto-generated)
Ich hatte damit angefangen, Ihnen zu erzählen, worum es die Semester gehen soll. Ich bin nicht ganz durchgekommen. Jetzt geht es weiter. Datenstrukturen will ich Ihnen in einer Veranstaltung nahelegen. Was heute so funktioniert an Datenstrukturen.
Wir hatten schon sowas gesehen, steht im Skript wie die Q, die Warteschlange. Eine Datenstruktur, in der ich an ein Ende Sachen ranstellen kann und am anderen Ende Sachen abholen kann. Wir hatten sowas gesehen wie den Stick, auf den ich was drauflegen kann.
Und das Oberste wieder runternehmen kann. Last in, first out und die Q war first in, first out. Natürlich auch die Arrays als solches. Das waren Datenstrukturen und viele andere mehr.
Das gehört zu jeder ordentlichen Klassenbibliothek dazu. Netterweise gibt es diese Datenstrukturen dann geschenkt, gratis. Die heißen professionellerweise dann Container oder Collections. Unter dem Namen tauchen Sie in der .NET Klassenbibliothek auf als Collections.
1001 Art seine Daten zu verpacken, in Schubladen zu legen. Das sieht dann im Programm ziemlich harmlos aus. Nehmen wir die Q.
Natürlich gibt es eine Klasse, die Q heißt. Wäre ja komisch. Genauer gesagt keine Klasse. Eigentlich ein Template würde man in C++ sagen oder eine generische Klasse. Sie sehen da stehen Spitzeklammern dahinter. Da scheint es noch einen Kniff zu geben. Ich kann sagen, ich hätte gerne so eine Warteschlange für Integer.
Das heißt die Klasse als solche ist noch nicht komplett fertig gebaut. Ich kann der Klasse noch mitgeben, wie sie denn ausgelegt sein soll. Gucken wir uns an der Stelle an. Jetzt sage ich hier, baue mir eine Warteschlange für ganze Zahlen. Was dahinter steht ist keine Überraschung.
Eine neue Warteschlange für ganze Zahlen bräuchte ich bitte. Dann hat man die Funktionen, von denen man erwartet, dass sie da sind. NQ. Die hatte ich hoffentlich auch schon letztes Semester erwähnt. Als wir selbst die Warteschlange gebaut haben. Wenn Sie die Zahl 42 in die Warteschlange stellen wollen, dann ebenso.
Und wenn Sie eine andere Zahl in die Warteschlange stellen wollen, dann ebenso. Es gibt Funktionen, um festzustellen, wie viele drin sind. Gucken wir mal, wie das bei dem hier heißt. Count heißt es hier.
An der Stelle beim Array war es length. Bei diesen komplizierteren Sachen heißt es gerne count. Sie können sagen int z ist gleich Q count. Um festzustellen, wie viele drin sind. Das wäre die Q von der Sorte. Dann gibt es x andere Content-Collections-Datensstrukturen.
Die gucken wir uns an. Die wichtigste ist folgende. List ist etwas wie ein Array, das sich aber noch nachträglich verändern kann in der Größe. Sie haben das in C gesehen und auch schon bei den ersten Experimenten hier. Man kann ein Array anlegen, in dem man sagt,
bau mal ein Array, in dem sieben integer Zahlen Platz haben. Da passen da sieben rein. Nicht acht, nicht neun. Das nervt an vielen Stellen. Da fehlt nur ein neues Array davor.
Wenn ich ein Objekt haben will, das sich wie ein Array anfühlt, veränderlich ist es in der Größe, nämlich List. In anderen Sprachen heißt es anders. In C++ und Java heißt das Ding Vector.
In C Sharp in .NET. In dieser Klassenbibliothek heißt es List. Dann nennen wir den ganz kreativ b. Eine neue Liste bauen. Dann können Sie das behandeln, als ob es ein Array wäre.
Oder als ob es eine Liste wäre. Sie können einmal sagen b add, füge was hinzu, füge die Zahl 13 hinzu. Sie können aber auch sagen, gib mir mal das nullte Element zurück, auf diese Weise. Es fühlt sich dann an wie ein Array.
Es kann angesprochen werden wie ein Array. Sie können aber insbesondere hinten neue Sachen anhängen. Man ist nicht festgenagelt auf sieben Stück, wie bei diesem hier. Das klassische Array. Simpler Art. Das ist noch relativ dumm. Man kann es noch ziemlich viel. Sie können es zum Beispiel nach der Länge fragen. Es gibt Funktionen zum Satieren.
Diese Sorte an Raketentechnik Array beherrscht auch, dass man neue Elemente hinten anfügt zum Beispiel. Trotzdem kann man damit umgehen, wie man es vom Array kennt. All das zählt zu den Collections. Das wird wahrscheinlich eine komplette Vorlesung, weil es ziemlich viele Details dazu gibt, wie man heute so etwas baut.
Wie man durch solche Listen, durch solche Queues einzeln durchschreitet. Dann wollte ich als nächstes bringen, was wir eigentlich die ganze Zeit schon machen. WPF, das Windows Presentation Framework.
Was passiert hier eigentlich? Was ist das hier unten für eine komische Datei, in der ich da editiere? Diese XML-Datei. Wie spielt das alles zusammen? Was für Objekte gibt es? Insbesondere finde ich es spannend, Grafiken zu bauen. Ich denke, das kann man sogar drinstehen lassen. Stört ja keinen.
Dann machen wir Folgendes. Ich baue hier einfach mal einen Button ein. Wenn ich ihn irgendwo finde. Da. Und bei Klick auf den Button soll eine Grafik gebaut werden. Die meisten von Ihnen haben schon rausgekriegt, obwohl ich sie nicht vorgeführt habe.
Man kann auch einfach hier doppelklicken. Statt dass Sie hier Klick als Ereignis eintragen, können Sie auch einfach hier doppelklicken. Und fertig. Dann trägt er das dann von selber ein. Da hinten. Immer das typische Ereignis für das jeweilige Element. Ok, beim Button ist es Klick. Jetzt möchte ich mal eine Grafik erzeugen.
Auch das geht so banal, wie man sich das vorstellt. Zum Beispiel eine Linie. Wir hatten die Ellipse. Ich baue einfach mal eine Linie. Ein geraden Stück ist gemeint. Eine Strecke ist gemeint. Wie baue ich die? Natürlich indem ich sage New Line. C ist jetzt also.
Na, ich sage es mal ganz vorsichtig. C verweist auf eine neue Linie. In diesem Fall ist C sogar eine neue Linie. Jetzt kann ich C einstellen. Ich stelle zum Beispiel die Anfangskoordinate. X1 und Y1.
Und die Endkoordinate. X2. 34 von mir aus. Und Y2. 45. Das wäre die Lage der Linie.
Ich sollte sagen, wie sie denn gezeichnet werden soll. Wenn Sie das hier durchgehen, sehen Sie die tausend Eigenschaften, die wir haben. Auch noch tausend Ereignisse. Stroke ist erst mal nur die Art der Füllung.
Sie sehen, was man sonst noch einstellen kann. So eine Linie zu zeichen, ist nicht ganz so banal, wie man sich das vorstellt. Da gibt es noch tausend Schnörkel, die man damit machen kann. Was passiert, wenn die Linie in die Kreuzung reingeht? Wie genau geht sie um die Ecke insbesondere? Okay, aber das ist erst mal, was ich überhaupt einstellen will. Die Füllung.
Brushes. Weg nehme ich einfach mal wieder. Wobei ich das vielleicht anmerken muss. Andere Systeme machen einen Unterschied zwischen dem Randstrich und der Füllung, was die Art der Füllung jeweils angeht. Dieses System macht jetzt keinen Unterschied mehr.
Es gibt nicht mehr den Unterschied zwischen Pens, Stiften und Brushes. Es gibt nicht nur Pinseln wie in anderen Systemen, sondern es gibt eigentlich nur noch die Brushes. Deshalb Brushes wet. Zum Beispiel als Stift oder Füllung, wie auch immer ich das haben will. Die Dicke kann ich einstellen.
Stroke. Sie sehen überhaupt, damit können Sie auch Strichlierung machen. Dash away. Dash ist die Strichlierung. Stroke Thickness scheint mir noch ganz plausibel. Den setze ich auf 5. Und zum Schluss muss ich diese Linie natürlich auch noch auf den Bildschirm bringen.
Das einfachste ist, dass ich hier mein Grid wieder umbaue in ein Canvas-Leinwand. Mit den frei platzierbaren Objekten. Ihm einen Namen gebe. Ja, einen Namen gebe. Name. The Canvas von hier aus.
Dann kann ich jetzt sagen... The Canvas. An das Ding möchte ich etwas anhängen. Ein Kind-Objekt. Sie sehen dieser Button. Wenn er da drin steht, gilt er als Kind-Objekt von dem Canvas. Von der Leinwand. Alles was dazwischen steht ist dann ein Kind-Objekt.
Sowas möchte ich jetzt aber im Programm machen. Weil ich weiß nicht vorher, was für eine Zeichnung es werden wird. Also nehme ich mir die Kinder. Children. Das ist die Sammlung aller Collection.
Die Sammlung aller Kind-Objekte, die drin sind. Und die hat netterweise die Funktion Add. Wie eben die Liste die Funktion Add hätte. Um etwas hinzuzufügen. Und da füge ich die Linie hinzu. Fertig. Das ist eine willige Art dann zu zeichnen.
Sie bauen zum Beispiel Linien-Objekte, Ellipsen-Objekte. Es gibt Polygonzüge. Es gibt geschwungene Linien. Sie bauen was immer sie wollen. Und hängen das an. Zum Beispiel ein Canvas-Objekt dran. Das müsste jetzt auf Mausklick funktionieren. Da ist die Linie.
Sie bleibt auch da. Das ist ziemlich anders als in gängigen Systemen. Insbesondere anders als beim Vorgänger Windows Forms. Diese Linie wird wirklich als Objekt behandelt. Und auch regelmäßig neu gezeichnet. In anderen Systemen müssten sie dafür sorgen, dass diese Linie auch wieder neu gezeichnet wird. Hier wird diese Linie einmal gebaut.
Und das System sorgt dafür, dass die Linie auch immer da ist. Wenn ich hier irgendwelche Spielereien mache. Weil sie noch nichts anderes kennen. Für Sie ist das hoffentlich eine ganz normale Geschichte. Dass die Linie eben da ist. Punkt. Alle Leute, die andere Systeme kennen, kriegen die Krise, wenn sie das sehen, dass das plötzlich so einfach wird.
Dass man die Linie nicht ständig selbst neu zeichnen muss. Also es wird tatsächlich dieses Objekt hinter den Kulissen verwaltet. Und das System weiß, wann es zeichnen muss. Und dass wir uns selbst darüber Gedanken machen müssen. Analog können Sie andere Sachen zeichnen. Um es völlig zu übertreiben, wollte ich mal vorführen, dass Windows Presentation Framework auch Echtzeit-Effekte kann.
Auf ziemlich schräge Art. Ich muss mir gerade überlegen, wie ich das mache. Ich bau mal Folgendes. Ich geh nochmal in die grafische Ansicht. Und bau noch einen Schieberegler dazu.
Da ist leider ein Schieberegler. Der geht ab Werk ein Minimum-Maximum von 0 bis 10. Ich mach mal von 0 bis 100. Und jetzt möchte ich damit einen Effekt steuern. Ich richte diesen Effekt in der Klasse ein.
Nicht im Namespace, sondern in der Klasse. Da gehört er hin. System, na, hat das was? System.Windows.Media.Effekt.
Punkt. Blur-Effekt. Und gebe den grandiosen Namen BE. Der Rest geht wieder mit Tabulator. Nu. Was soll es werden? Das weiß er jetzt. Was soll das werden? Ein neuer Effekt. Also auch das hier ein kleines Maschinen wieder. Wie wir Datumsangaben hatten. Oder Timer. Knöpfe.
Jetzt ein Weichzeichner-Effekt als Maschinen. Das ist so. Und ich sage hier am Abschluss der Vorbereitungen sage ich dem Canvas-Objekt. Diesem Objekt sage ich es möge bitte als Effekt diesen Effekt nehmen.
Und wenn der Schieberegler bewegt wird, verstelle ich den Effekt. Kann man jetzt nicht so viel einstellen, aber immerhin kann man Radius einstellen. Ich stelle den Weichzeichner-Radius. Also die Stärke des Weichzeichners
auf das, was mir der Schieberegler hier gibt. Der heißt Slider irgendwie. Da ist er, Slider 1. Und dessen Wert ist natürlich Value. So sieht das aus. Also dieses Ereignis wird gefeuert, wenn der Schieberegler bewegt wird. Ich hole den aktuellen Stand des Schiebereglers. Das war hier eine Zahl von 0 bis 100.
Und schreibe das in den Effekt als Radius rein. Das heißt, dieser Schieberegler wird steuern, wie stark der Weichzeichner wirkt. Scheint nicht auf Null zu stehen. Sollte ich zu Beginn auf Null stellen. Ich nehme auch hier mal den Knopf, dass wir eine kleine Linie haben.
Da ist eine kleine Linie. Sie sehen, der Weichzeichner stand nicht auf Null ab Beginn. Den hätte ich zu Beginn auf Null stellen sollen. Aber wenn ich jetzt den Schieberegler bewege, wird natürlich der Weichzeichner auf den Wert des Schiebereglers gestellt. Also am Null. Und wenn der Schieberegler auf Null ist, kein Weichzeichner. Und jetzt kann ich hiermit regeln, wie weichgezeichnet das Ganze wird.
Der Weichzeichnereffekt ist vielleicht jetzt nicht so sinnvoll im Allgemeinen. Es gibt Schatteneffekte, Farbwechseleffekte und ähnliches. Sie können auch selbst was bauen. Und dann wird es tatsächlich später spannend, wenn man ein bisschen weiß, wie das mit der Grafikkarte so funktioniert und solche Effekte selber bauen kann. Schlagschatten, weiche Schlagschatten zum Beispiel.
Oder für Animationen irgendwelche Farbwechseleffekte. Der Weichzeichner ist lustig, aber es sieht eher aus wie ein Brillen-Test hier. Sie können den natürlich auch gezielt anwenden, den Weichzeichner.
Ich habe hier ja gesagt The Canvas. Quatsch. Nein. Da habe ich das gesagt. Ich habe es als Effekt der ganzen Fläche zugewiesen. Sie können natürlich gezielt irgendwelche Bilder oder einzelne Elemente zuweisen.