{"id":55000203,"date":"2020-02-01T00:00:00","date_gmt":"2020-06-15T11:34:17","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=203"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"FlowDocumentElemente_mit_XAML","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/FlowDocumentElemente_mit_XAML\/","title":{"rendered":"FlowDocument-Elemente mit XAML"},"content":{"rendered":"<p><b>Ein Element des Typs FlowDocument dient zusammen mit den drei Steuerelementen Flow-DocumentScrollViewer, FlowDocumentTextViewer und FlowDocumentReader der Textdarstellung in WPF. W&auml;hrend auch andere Steuer-elemente wie TextBox oder Text-Block Texte darstellen k&ouml;nnen und auch ihre Bearbeitung erm&ouml;glichen, bietet das Flow-Document viel mehr M&ouml;glichkeiten, was die Gestaltung des Texts angeht. Neben verschiedenen Absatzformatierungen und Zeichenformatierungen sind hier auch die An-zeige von Listen, Tabellen oder eingebauten Elementen wie Bildern m&ouml;glich. Dieser Artikel stellt das FlowDocument-Element mit seinen Eigenschaften vor und zeigt auch, wie Sie solche Dokumente mit VB zur Laufzeit erstellen k&ouml;nnen. Letzteres ist interessant, wenn Sie Inhalte aus verschiedenen Feldern einer Datenbank strukturiert und formatiert darstellen wollen.<\/b><\/p>\n<p>FlowDocuments ben&ouml;tigen entweder eines der drei Darstellungs-Steuerelemente <b>FlowDocumentScrollViewer<\/b>, <b>FlowDocumentTextViewer <\/b>oder <b>FlowDocumentReader <\/b>oder, wenn Sie den Inhalt bearbeiten wollen, das <b>RichTextBox<\/b>-Steuerelement.<\/p>\n<p>Im vorliegenden Artikel verwenden wir einfach das <b>FlowDocumentReader<\/b>-Steuerelement, damit wir die per WPF zusammengestellten formatierten Texte darstellen k&ouml;nnen. Auf das <b>RichTextBox<\/b>-Steuerelement gehen wir im Artikel <b>Das RichTextBox-Steuerelement <\/b>ein.<\/p>\n<p><b>FlowDocument anlegen<\/b><\/p>\n<p>Ein <b>FlowDocument<\/b>-Element k&ouml;nnen wir beispielsweise wie in Bild 1 in einem <b>Flow-Document-Reader<\/b>-Steuerelement ausgeben. Und die WPF-Definition beginnt auch genau so: Wir legen in einem neuen, leeren Fenster ein <b>FlowDocumentReader<\/b>-Element an, dem wir ein <b>FlowDocument<\/b>-Element hinzuf&uuml;gen:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_01\/pic_203_001.png\" alt=\"Ausgabe des Inhalts eines FlowDocuments im FlowDocumentReader-Steuerelement\" width=\"649,559\" height=\"513,243\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Ausgabe des Inhalts eines FlowDocuments im FlowDocumentReader-Steuerelement<\/span><\/b><\/p>\n<pre>&lt;FlowDocumentReader&gt;\r\n     &lt;FlowDocument&gt;\r\n     ...\r\n     &lt;\/FlowDocument&gt;\r\n&lt;\/FlowDocumentReader&gt;<\/pre>\n<p>Damit erhalten wir dann ein noch leeres <b>FlowDocument-Reader<\/b>-Element im Entwurf der <b>.xaml<\/b>-Datei (siehe Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_01\/pic_203_002.png\" alt=\"Das leere FlowDocument im FlowDocumentReader\" width=\"649,559\" height=\"369,9753\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Das leere FlowDocument im FlowDocumentReader<\/span><\/b><\/p>\n<p><b>Text zum FlowDocument hinzuf&uuml;gen<\/b><\/p>\n<p>Das FlowDocument f&uuml;llen wir sehr schnell, indem wir einfach ein <b>Paragraph<\/b>-Objekt mit einem beliebigen Text zum <b>FlowDocument<\/b>-Element hinzuf&uuml;gen:<\/p>\n<pre>&lt;Paragraph&gt;Ein neuer Text.&lt;\/Paragraph&gt;<\/pre>\n<p>Praktischerweise zeigt der Entwurf die so hinzugef&uuml;gten Inhalte direkt an (siehe Bild 3). So m&uuml;ssen wir nicht immer das Projekt starten, um den Fortschritt zu betrachten.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_01\/pic_203_003.png\" alt=\"Ein Beispielabsatz\" width=\"349,7625\" height=\"136,9353\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Ein Beispielabsatz<\/span><\/b><\/p>\n<p><b>Absatzformatierungen<\/b><\/p>\n<p>Das <b>Paragraph<\/b>-Element erlaubt einige Formatierungen, die f&uuml;r den kompletten Absatz gelten.<\/p>\n<p>Diese geben Sie als Attribute f&uuml;r das <b>Paragraph<\/b>-Element an. Die wichtigsten dienen der Formatierung des Texts:<\/p>\n<ul>\n<li><b>FontFamily<\/b>: Gibt den Namen der Schriftart f&uuml;r den Text des Absatzes an, zum Beispiel <b>Arial<\/b>.<\/li>\n<li><b>FontSize<\/b>: Gibt an, welche Gr&ouml;&szlig;e die Schrift haben soll (Angabe als numerischer Wert wie etwa in Word)<\/li>\n<li><b>FontWeight<\/b>: Gibt an, ob der Text normal (Standardwert) oder fett gedruckt werden soll (Wert <b>Bold<\/b>)<\/li>\n<li><b>FontStyle<\/b>: F&uuml;r kursive Darstellung mit den Werten <b>Italic <\/b>oder <b>Oblique<\/b>.<\/li>\n<\/ul>\n<p>Mit diesen Formatierungen erhalten wir bereits ein anderes Ergebnis als zuvor (siehe Bild 4):<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_01\/pic_203_004.png\" alt=\"Formatierter Absatz\" width=\"349,7625\" height=\"130,4854\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Formatierter Absatz<\/span><\/b><\/p>\n<pre>&lt;Paragraph FontWeight=\"Bold\" FontFamily=\"Arial\" FontSize=\"16\" FontStyle=\"Italic\"&gt;Fetter Arial-Text mit Gr&ouml;&szlig;e 16.&lt;\/Paragraph&gt;<\/pre>\n<p>Damit k&ouml;nnen wir verschiedene Absatzformatierungen durchf&uuml;hren und erhalten eine optisch brauchbare Formatierung &#8211; wie zum Beispiel mit den wie folgt definierten Abs&auml;tzen:<\/p>\n<pre>&lt;Paragraph FontSize=\"16\" FontFamily=\"Arial\" FontWeight=\"Bold\"&gt;Zwischen&uuml;berschrift&lt;\/Paragraph&gt;\r\n&lt;Paragraph FontSize=\"12\" FontFamily=\"Arial\"&gt;Dies ist der erste Absatz unseres Beispieldokuments. ...&lt;\/Paragraph&gt;\r\n&lt;Paragraph FontSize=\"12\" FontFamily=\"Arial\"&gt;Der zweite Absatz des Beispieldokuments. ...&lt;\/Paragraph&gt;\r\n&lt;Paragraph FontSize=\"16\" FontFamily=\"Arial\" FontWeight=\"Bold\"&gt;Und noch eine Zwischen&uuml;berschrift.&lt;\/Paragraph&gt;\r\n&lt;Paragraph FontSize=\"12\" FontFamily=\"Arial\"&gt;Dies ist der erste Absatz unseres Beispieldokuments. ...&lt;\/Paragraph&gt;\r\n&lt;Paragraph FontSize=\"12\" FontFamily=\"Arial\"&gt;Der zweite Absatz des Beispieldokuments. ...&lt;\/Paragraph&gt;<\/pre>\n<p>Diese Abs&auml;tze sehen nach dem Starten des Projekts wie in Bild 5 aus. Wir haben das Fenster mit dem <b>FlowDocumentReader <\/b>ein wenig verkleinert, um zu zeigen, dass das Dokument dann auf zwei Seiten aufgeteilt wird, von der die erste angezeigt wird. Mit den Steuerelementen unten k&ouml;nnen Sie dann zur zweiten Seite bl&auml;ttern. Au&szlig;erdem haben wir die Breite soweit verringert, dass das Fenster den Text in nur einer Spalte anzeigt. Wenn Sie das Fenster wieder breiter ziehen, erscheinen zun&auml;chst zwei Spalten, dann auch noch mehr als zwei Spalten.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_01\/pic_203_005.png\" alt=\"Ausgabe einiger Abs&auml;tze im FlowDocumentReader-Element\" width=\"424,7115\" height=\"433,7909\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Ausgabe einiger Abs&auml;tze im FlowDocumentReader-Element<\/span><\/b><\/p>\n<p>Die Formatierung der Schrift m&uuml;ssen Sie nicht f&uuml;r jeden Absatz einzeln durchf&uuml;hren. Sie k&ouml;nnen die Attribute auch f&uuml;r die &uuml;bergeordneten Elemente definieren. Die untergeordneten Elemente &uuml;bernehmen beziehungsweise &#8220;erben&#8221; die Werte der &uuml;bergeordneten Elemente.<\/p>\n<p><b>Inline-Elemente<\/b><\/p>\n<p>Sie k&ouml;nnen auch einzelne Elemente innerhalb eines Absatzes formatieren. Dazu nutzen Sie wie unter HTML sogenannte Inline-Formatierungen. Zum Formatieren des Textes mit fetten, kursiven oder unterstrichenen Zeichen verwenden Sie die folgenden Elemente:<\/p>\n<ul>\n<li><b>Bold<\/b>: Formatiert den eingeschlossenen Text fett.<\/li>\n<li><b>Italic<\/b>: Formatiert den eingeschlossenen Text kursiv.<\/li>\n<li><b>Underline<\/b>: Unterstreicht den eingeschlossenen Text.<\/li>\n<\/ul>\n<p>Ein Beispiel mit allen drei Formatierungen:<\/p>\n<pre>&lt;Paragraph FontSize=\"12\" FontFamily=\"Arial\"&gt;Text mit &lt;Bold&gt;fettem&lt;\/Bold&gt;, &lt;Italic&gt;kursivem&lt;\/Italic&gt; und &lt;Underline&gt;unterstrichenem&lt;\/Underline&gt; Inhalt.&lt;\/Paragraph&gt;<\/pre>\n<p>In den <b>.xaml<\/b>-Code eingebaute Zeilenumbr&uuml;che wirken sich &uuml;brigens nicht auf die Darstellung aus. Die folgenden, vom <b>.xaml<\/b>-Editor automatisch hinzugef&uuml;gten Zeilenumbr&uuml;che werden also nicht auf den Text &uuml;bertragen:<\/p>\n<pre>&lt;Paragraph FontSize=\"12\" FontFamily=\"Arial\"&gt;Text mit\r\n     &lt;Bold&gt;fettem&lt;\/Bold&gt; ,\r\n     &lt;Italic&gt;kursivem&lt;\/Italic&gt; und\r\n     &lt;Underline&gt;unterstrichenem&lt;\/Underline&gt; Inhalt.\r\n&lt;\/Paragraph&gt;<\/pre>\n<p><b>Zeilenumbr&uuml;che<\/b><\/p>\n<p>Wenn Sie Zeilenumbr&uuml;che w&uuml;nschen, m&uuml;ssen Sie diese explizit angeben. Unter HTML f&uuml;gen Sie Zeilenumbr&uuml;che mit dem Zeichen <b><\/b> ein, unter WPF in <b>FlowDocument<\/b>-Elementen mit dem Element <b><LineBreak \/><\/b> (das abschlie&szlig;ende Slash-Zeichen ist zwingend erforderlich):<\/p>\n<pre>&lt;Paragraph FontSize=\"12\" FontFamily=\"Arial\"&gt;Text mit einem Zeilenumbruch\r\n     &lt;LineBreak \/&gt; vor diesem Teil.&lt;\/Paragraph&gt;<\/pre>\n<p><b>Abbildungen mit dem Figure-Element<\/b><\/p>\n<p>Mit dem <b>Figure<\/b>-Element k&ouml;nnen Sie Abbildungen und andere Elemente in den Flie&szlig;text integrieren. Dazu f&uuml;gen Sie in das <b>Paragraph<\/b>-Element ein <b>Figure<\/b>-Element ein. Dieses bietet Eigenschaften wie die folgenden:<\/p>\n<ul>\n<li><b>HorizontalAnchor<\/b>: Horizontaler Anker, <b>ColumnRight <\/b>verankert beispielsweise am rechten Rand der aktuellen Spalte<\/li>\n<li><b>VerticalAnchor<\/b>: Vertikaler Anker, <b>ParagraphTop <\/b>beispielsweise verankert am oberen Rand des Absatzes<\/li>\n<li><b>Width<\/b>\/<b>Height<\/b>: Geben Breite und H&ouml;he des Elements an.<\/li>\n<li><b>VerticalOffset<\/b>: Gibt den vertikalen Versatz an.<\/li>\n<li><b>HorizontalOffset<\/b>: Gibt den horizontalen Versatz an.<\/li>\n<\/ul>\n<p>Mit diesen Eigenschaften l&auml;sst sich eine Abbildung wie in Bild 6 einbetten.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_01\/pic_203_006.png\" alt=\"Einbetten einer Abbildung per Figure-Element\" width=\"599,593\" height=\"420,7312\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Einbetten einer Abbildung per Figure-Element<\/span><\/b><\/p>\n<p>Dazu ben&ouml;tigen wir noch einige weitere Elemente, die wir in das <b>Figure<\/b>-Element einbauen &#8211; zun&auml;chst ein <b>BlockUIContainer<\/b>-Element ohne Attribute und darin den eigentlichen Inhalt, in diesem Fall ein <b>Image<\/b>-Element mit dem anzuzeigenden Bild:<\/p>\n<pre>&lt;Paragraph FontSize=\"12\" FontFamily=\"Arial\"&gt;\r\n     &lt;Figure Width=\"200\" HorizontalAnchor=\"ColumnRight\" VerticalAnchor=\"ParagraphTop\"&gt;\r\n         &lt;BlockUIContainer&gt;\r\n             &lt;Image Source=\"images\/pic005.png\"\/&gt;\r\n         &lt;\/BlockUIContainer&gt;\r\n     &lt;\/Figure&gt;\r\nDies ist der erste Absatz unseres Beispieldokuments. ...&lt;\/Paragraph&gt;<\/pre>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 200 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000203\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/data\/wp\/v2\/posts\/55000203?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000203\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"edd26c4512\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ein Element des Typs FlowDocument dient zusammen mit den drei Steuerelementen Flow-DocumentScrollViewer, FlowDocumentTextViewer und FlowDocumentReader der Textdarstellung in WPF. W&auml;hrend auch andere Steuer-elemente wie TextBox oder Text-Block Texte darstellen k&ouml;nnen und auch ihre Bearbeitung erm&ouml;glichen, bietet das Flow-Document viel mehr M&ouml;glichkeiten, was die Gestaltung des Texts angeht. Neben verschiedenen Absatzformatierungen und Zeichenformatierungen sind hier auch die An-zeige von Listen, Tabellen oder eingebauten Elementen wie Bildern m&ouml;glich. Dieser Artikel stellt das FlowDocument-Element mit seinen Eigenschaften vor und zeigt auch, wie Sie solche Dokumente mit VB zur Laufzeit erstellen k&ouml;nnen. Letzteres ist interessant, wenn Sie Inhalte aus verschiedenen Feldern einer Datenbank strukturiert und formatiert darstellen wollen.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[66012020,662020,44000002,44000025],"tags":[],"yst_prominent_words":[],"class_list":["post-55000203","post","type-post","status-publish","format-standard","hentry","category-66012020","category-662020","category-Benutzeroberflaeche_mit_WPF","category-VBAProgrammierung"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000203","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000203"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000203\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000203"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000203"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000203"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000203"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}