{"id":55000245,"date":"2020-12-01T00:00:00","date_gmt":"2020-12-23T17:27:31","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=245"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Symbolleisten_mit_dem_ToolBarSteuerelement","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Symbolleisten_mit_dem_ToolBarSteuerelement\/","title":{"rendered":"Symbolleisten mit dem ToolBar-Steuerelement"},"content":{"rendered":"<p><b>Bei Anwendungen, die eine Men&uuml;leiste statt des Ribbons verwenden, finden Sie meist auch noch Symbolleisten vor. Davon gibt es im Gegensatz zur Men&uuml;leiste manchmal nicht nur eine, sondern mehrere. Symbolleisten zeichnen sich au&szlig;erdem dadurch aus, dass Sie diese verschieben k&ouml;nnen und dass sie keine Untermen&uuml;s enthalten. Au&szlig;erdem finden Sie die Befehle meist in Form einfacher Schaltfl&auml;chen mit entsprechenden Symbolen vor, damit diese wenig Platz wegnehmen. Auch f&uuml;r eine WPF-Anwendung k&ouml;nnen Sie Symbolleisten hinzuf&uuml;gen. Wie das geht, zeigt der vorliegende Artikel.<\/b><\/p>\n<p>Im Artikel <b>Das Menu-Steuerelement <\/b>(<b>www.datenbankentwickler.net\/244<\/b>) haben wir bereits gezeigt, wie Sie eine Men&uuml;leiste zum Fenster einer Anwendung hinzuf&uuml;gen. Es gibt immer nur eine Men&uuml;leiste je Fenster, dem Sie ein oder mehrere Elemente in der obersten Ebene hinzuf&uuml;gen k&ouml;nnen. Diese stellen normalerweise per Mausklick eine aufklappbare Liste von Befehlen oder weiteren Untermen&uuml;s zur Verf&uuml;gung. Bei den Symbolleisten ist es etwas anders: Sie k&ouml;nnen auch mehr als eine Symbolleiste hinzuf&uuml;gen, die nach dem Wunsch des Benutzers angeordnet werden kann. In den Beispielen zu diesem Artikel verwenden wir wieder ein &uuml;bergeordnetes <b>DockPanel<\/b>-Element, dem wir eine Men&uuml;leiste und eine Symbolleiste hinzuf&uuml;gen.<\/p>\n<p><b>Aufbau einer Symbolleiste<\/b><\/p>\n<p>Bei der Men&uuml;leiste ist der Aufbau eindeutig: Es gibt ein <b>Menu<\/b>-Element, das im <b>DockPanel<\/b>-Element oben angedockt wird und das die ben&ouml;tigten Men&uuml;elemente enth&auml;lt. Bei der Symbolleiste verwenden wir noch ein zus&auml;tzliches Element, n&auml;mlich das <b>ToolBarTray <\/b>in der obersten Ebene. Dieses ordnen Sie wie das <b>Menu<\/b>-Element dem <b>DockPanel<\/b>-Element unter (siehe Beispielprojekt, <b>MainWindow.xaml<\/b>, <b>Beispiel 1<\/b>):<\/p>\n<pre>&lt;Window x:Class=\"MainWindow\" ... Title=\"MainWindow\" Height=\"350\" Width=\"600\"&gt;\r\n     &lt;DockPanel&gt;\r\n         &lt;Menu DockPanel.Dock=\"Top\"&gt;...&lt;\/Menu&gt;\r\n         &lt;ToolBarTray DockPanel.Dock=\"Top\"&gt;<\/pre>\n<p>Das <b>ToolBarTray<\/b>-Element kann dann ein oder mehrerere <b>ToolBar<\/b>-Elemente enthalten, die wiederum <b>Button<\/b>-Elemente mit dem Befehlen bereithalten:<\/p>\n<pre>             &lt;ToolBar&gt;\r\n                 &lt;Button Command=\"Cut\" Content=\"Ausschneiden\"&gt;&lt;\/Button&gt;\r\n                 &lt;Button Command=\"Copy\" Content=\"Kopieren\"&gt;&lt;\/Button&gt;\r\n                 &lt;Button Command=\"Paste\" Content=\"Einf&uuml;gen\"&gt;&lt;\/Button&gt;<\/pre>\n<p>Zum Abschluss werden die ge&ouml;ffneten Elemente <b>ToolBar <\/b>und <b>ToolBarTray <\/b>wieder geschlossen und es folgt beispielsweise ein Grid-Element, das die &uuml;brigen Steuerelemente des Fensters enth&auml;lt:<\/p>\n<pre>             &lt;\/ToolBar&gt;\r\n         &lt;\/ToolBarTray&gt;\r\n         &lt;Grid&gt;...&lt;\/Grid&gt;\r\n     &lt;\/DockPanel&gt;\r\n&lt;\/Window&gt;<\/pre>\n<p>In Bild 1 sehen Sie die resultierende Symbolleiste. In diesem Fall haben wir einige eingebaute Befehle &uuml;ber das <b>Command<\/b>-Attribut verf&uuml;gbar gemacht &#8211; <b>Cut<\/b>, <b>Copy <\/b>und <b>Paste<\/b>. Leider erkennt die Anwendung nicht, dass diese hier in einer Symbolleiste abgebildet werden sollen und zeigt keine Icons, sondern nur den Text an. Das k&ouml;nnen wir &auml;ndern!<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_06\/pic_245_001.png\" alt=\"Fenster mit Symbolleiste\" width=\"449,6946\" height=\"121,2917\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Fenster mit Symbolleiste<\/span><\/b><\/p>\n<p><b>Symbolleiste mit Icons<\/b><\/p>\n<p>Wenn wir statt der Beschriftungen f&uuml;r die eingebauten Befehle <b>Cut<\/b>, <b>Copy <\/b>und <b>Paste <\/b>nur Icons anzeigen wollen, m&uuml;ssen wir diese zun&auml;chst zum Projekt hinzuf&uuml;gen. Dazu legen wir im Projektmappen-Explorer ein neues Verzeichnis namens <b>Icons <\/b>an und f&uuml;gen diesem die ben&ouml;tigten Icons hinzu (siehe Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_06\/pic_245_002.png\" alt=\"Hinzuf&uuml;gen von Icons zum Projekt\" width=\"349,7625\" height=\"385,0596\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Hinzuf&uuml;gen von Icons zum Projekt<\/span><\/b><\/p>\n<p>Danach bearbeiten wir die Steuerelemente der Symbolleiste in der XAML-Definition so, dass sie statt Text die Icons anzeigen. Dazu entfernen wir die <b>Content<\/b>-Attribute und f&uuml;gen jeweils ein <b>Image<\/b>-Element hinzu. Dieses erh&auml;lt f&uuml;r das Attribut <b>Source <\/b>den Pfad zu der Bilddatei im Projektverzeichnis (siehe Beispielprojekt, <b>MainWindow.xaml<\/b>, <b>Beispiel 2<\/b>):<\/p>\n<pre>&lt;ToolBarTray DockPanel.Dock=\"Top\"&gt;\r\n     &lt;ToolBar&gt;\r\n         &lt;Button Command=\"Cut\"&gt;\r\n             &lt;Image Source=\"Icons\/cut.png\"&gt;&lt;\/Image&gt;\r\n         &lt;\/Button&gt;\r\n         &lt;Button Command=\"Copy\"&gt;\r\n             &lt;Image Source=\"Icons\/copy.png\"&gt;&lt;\/Image&gt;\r\n         &lt;\/Button&gt;\r\n         &lt;Button Command=\"Paste\"&gt;\r\n             &lt;Image Source=\"Icons\/clipboard_paste.png\"&gt;&lt;\/Image&gt;\r\n         &lt;\/Button&gt;\r\n     &lt;\/ToolBar&gt;\r\n&lt;\/ToolBarTray&gt;<\/pre>\n<p>Das Ergebnis sehen Sie in Bild 3. Interessanterweise werden die Schaltfl&auml;chen mit den Icons im Gegensatz zu den reinen Text-Schaltfl&auml;chen nicht in Abh&auml;ngigkeit vom Kontext als aktiviert oder deaktiviert gekennzeichnet. So sollte zum Beispiel die <b>Ausschneiden<\/b>-Schaltfl&auml;che nur als aktiv dargestellt werden, wenn im Textfeld darunter ein Text markiert ist. Das wollen wir sp&auml;ter nachholen &#8211; erst einmal schauen wir uns an, wie wir eine weitere Symbolleiste hinzuf&uuml;gen und wie wir Icons und Texte auf einer Schaltfl&auml;che kombinieren k&ouml;nnen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_06\/pic_245_003.png\" alt=\"Symbolleiste mit Icons\" width=\"299,7964\" height=\"121,2917\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Symbolleiste mit Icons<\/span><\/b><\/p>\n<p><b>Eine zweite Symbolleiste hinzuf&uuml;gen<\/b><\/p>\n<p>Zum Hinzuf&uuml;gen einer zweiten Symbolleiste legen Sie einfach ein weiteres <b>ToolBar<\/b>-Element im <b>ToolBarTray<\/b>-Element an. Je nachdem, ob die zweite Symbolleiste vor oder hinter der ersten erscheinen soll, f&uuml;gen Sie das neue <b>ToolBar<\/b>-Element vor oder hinter einem bereits bestehenden <b>ToolBar<\/b>-Element ein (siehe Beispielprojekt, <b>MainWindow.xaml<\/b>, <b>Beispiel 3<\/b>):<\/p>\n<pre>&lt;ToolBarTray DockPanel.Dock=\"Top\"&gt;\r\n     &lt;ToolBar&gt;\r\n         ... Steuerelemente\r\n     &lt;\/ToolBar&gt;\r\n     &lt;ToolBar&gt;\r\n         ... Steuerelemente\r\n     &lt;\/ToolBar&gt;\r\n&lt;\/ToolBarTray&gt;<\/pre>\n<p>In diesem Fall werden die beiden Symbolleisten direkt nebeneinander angezeigt (siehe Bild 4). Es gibt jedoch die M&ouml;glichkeit, diese auch untereinander auszugeben.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_06\/pic_245_004.png\" alt=\"Zwei Symbolleisten nebeneinander\" width=\"449,6946\" height=\"119,8525\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Zwei Symbolleisten nebeneinander<\/span><\/b><\/p>\n<p>Der einfachste Weg ist, dass der Benutzer die Symbolleisten einfach per Drag and Drop so positioniert, wie er sich diese w&uuml;nscht (siehe Bild 5). Beim n&auml;chsten Start der Anwendung werden die Symbolleisten allerdings wieder so wie im XAML-Code definiert ausgegeben. Wie also k&ouml;nnen wir die Symbolleisten direkt beim Starten untereinander anzeigen<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_06\/pic_245_005.png\" alt=\"Zwei Symbolleisten untereinander\" width=\"324,7794\" height=\"123,4541\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Zwei Symbolleisten untereinander<\/span><\/b><\/p>\n<p><b>Symbolleistenposition relativ zu anderen Symbolleisten<\/b><\/p>\n<p>Wenn Sie mehr als eine Symbolleiste verwenden, also mehr als ein <b>ToolBar<\/b>-Element innerhalb des <b>ToolBarTray<\/b>-Elements einf&uuml;gen, werden diese wie oben beschrieben einfach in der gleichen Reihenfolge nebeneinander angeordnet. Wenn Sie die Reihenfolge &auml;ndern m&ouml;chten, ohne die Reihenfolge im Code zu &auml;ndern, k&ouml;nnen Sie das mit der Eigenschaft <b>BandIndex <\/b>erledigen. <b>BandIndex <\/b>ist ein <b>0<\/b>-basierter Index (siehe Beispielprojekt, <b>MainWindow.xaml<\/b>, <b>Beispiel 4<\/b>). Wenn Sie also f&uuml;r das erste <b>ToolBar<\/b>-Element innerhalb des <b>ToolBarTray<\/b>-Elements den Wert <b>0 <\/b>angeben, dann verbleibt es an der Position, die es vorher innehatte. Im folgenden Beispiel erhalten wir die Anordnung aus Bild 6:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_06\/pic_245_006.png\" alt=\"Standardreihenfolge\" width=\"449,6946\" height=\"116,2132\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Standardreihenfolge<\/span><\/b><\/p>\n<pre>&lt;ToolBarTray DockPanel.Dock=\"Top\"&gt;\r\n     &lt;ToolBar&gt;\r\n         &lt;Button&gt;Button in Toolbar 1&lt;\/Button&gt;\r\n     &lt;\/ToolBar&gt;\r\n     &lt;ToolBar&gt;\r\n         &lt;Button&gt;Button in Toolbar 2&lt;\/Button&gt;\r\n     &lt;\/ToolBar&gt;\r\n     &lt;ToolBar&gt;\r\n         &lt;Button&gt;Button in Toolbar 3&lt;\/Button&gt;\r\n     &lt;\/ToolBar&gt;\r\n&lt;\/ToolBarTray&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\/55000245\/\">\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\/55000245?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\/55000245\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"2c6d4a5d32\"\/>\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>Bei Anwendungen, die eine Men&uuml;leiste statt des Ribbons verwenden, finden Sie meist auch noch Symbolleisten vor. Davon gibt es im Gegensatz zur Men&uuml;leiste manchmal nicht nur eine, sondern mehrere. Symbolleisten zeichnen sich au&szlig;erdem dadurch aus, dass Sie diese verschieben k&ouml;nnen und dass sie keine Untermen&uuml;s enthalten. Au&szlig;erdem finden Sie die Befehle meist in Form einfacher Schaltfl&auml;chen mit entsprechenden Symbolen vor, damit diese wenig Platz wegnehmen. Auch f&uuml;r eine WPF-Anwendung k&ouml;nnen Sie Symbolleisten hinzuf&uuml;gen. Wie das geht, zeigt der vorliegende Artikel.<\/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":[662020,66062020,44000002,44000027,44000017],"tags":[],"yst_prominent_words":[],"class_list":["post-55000245","post","type-post","status-publish","format-standard","hentry","category-662020","category-66062020","category-Benutzeroberflaeche_mit_WPF","category-Excel_programmieren","category-WebApps_Razor_Pages"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000245","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=55000245"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000245\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000245"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000245"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000245"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000245"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}