{"id":55000055,"date":"2016-10-01T00:00:00","date_gmt":"2020-03-27T19:22:18","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=55"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Ribbons_mit_WPF","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Ribbons_mit_WPF\/","title":{"rendered":"Ribbons mit WPF"},"content":{"rendered":"<p><b>Der geneigte Access-Entwickler wei&szlig; mit dem Begriff Ribbon nat&uuml;rlich etwas anzufangen. Aber gibt es so etwas auch f&uuml;r .NET-Anwendungen Ist das nicht ein reines Office-Feature Immerhin gibt es ja auch in der Benutzeroberfl&auml;che von Visual Studio kein Ribbon, sondern eine Men&uuml;leiste und Symbolleisten, wie Sie sie von &auml;lteren Office-Versionen bis Office 2003 kennen (man munkelt, einige Entwickler w&uuml;nschten sich die Men&uuml;leisten zur&uuml;ck &#8230;). In diesem Artikel schauen wir uns an, wie weit es mit dem Ribbon unter .NET und speziell unter WPF bestellt ist und welche Unterst&uuml;tzung uns Visual Studio f&uuml;r die Programmierung von Ribbons bietet.<\/b><\/p>\n<p>Um herauszufinden, ob es unter WPF Ribbons gibt und wie diese programmiert werden, starten wir mit einem neuen Projekt unter dem Namen <b>RibbonsInWPF <\/b>mit der Vorlage <b>Visual C#|Windows|WPF-Anwendungen<\/b>. Dort beginnen wir mit dem Fenster <b>MainWindow<\/b>, das ja automatisch als Startfenster angelegt wird. <\/p>\n<p>Die schnelle Eingabe des Suchbegriffs Ribbon in das Suchfenster der Toolbox von Visual Studio liefert schon einmal keine Ergebnisse. Also werfen wir einen Blick in den Dialog <b>Neues Element hinzuf&uuml;gen<\/b>, den Sie mit dem gleichnamigen Befehl des Eintrags <b>Projekt <\/b>der Men&uuml;leiste &ouml;ffnen. Auch hier gibt es eine Suchm&ouml;glichkeit, die wir allerdings ebenfalls ohne Erfolg nutzen. Gibt es etwa gar keine Ribbons unter WPF<\/p>\n<p>Vielleicht m&uuml;ssen wir daf&uuml;r eine spezielle Bibliothek hinzuf&uuml;gen. Also &ouml;ffnen wir den <b>Verweis-Manager <\/b>(Men&uuml;eintrag <b>Projekt|Verweis hinzuf&uuml;gen&#8230;<\/b>) und suchen hier nach dem Ausdruck <b>Ribbon<\/b>. Bingo! Hier werden wir endlich f&uuml;ndig und f&uuml;gen den Eintrag aus Bild 1 per Mausklick zu den eingebundenen Referenzen hinzu. In den Steuerelementen und auch im Dialog <b>Neues Element hinzuf&uuml;gen <\/b>finden sich allerdings weiterhin keine neuen Elemente. Um es kurz zu machen: Auch in Visual Studio m&uuml;ssen Sie manuell XML-Code eingeben, um ein Ribbon zu definieren. Also legen wir los und f&uuml;gen im <b>Grid<\/b>-Element ein erstes <b>Ribbon<\/b>-Element hinzu:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_05\/pic_55_001.png\" alt=\"Hinzuf&uuml;gen einer Referenz auf die Bibliothek System.Windows.Controls.Ribbon\" width=\"649,559\" height=\"333,8699\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Hinzuf&uuml;gen einer Referenz auf die Bibliothek System.Windows.Controls.Ribbon<\/span><\/b><\/p>\n<pre>&lt;Window x:Class=\"RibbonMitWPF.MainWindow\"&gt;\r\n     &lt;Grid&gt;\r\n         &lt;Ribbon&gt;&lt;\/Ribbon&gt;\r\n     &lt;\/Grid&gt;\r\n&lt;\/Window&gt;<\/pre>\n<p>Das Ergebnis bekommen wir allerdings immerhin direkt in Form eines entsprechenden Elements im Entwurf des WPF-Fensters zu sehen (siehe Bild 2). Ein Klick mit der rechten Maustaste auf das Ribbon liefert ebenfalls keine M&ouml;glichkeit, auf die Schnelle ein paar Steuerelemente zum Ribbon hinzuzuf&uuml;gen. Also genie&szlig;en wir zumindest die Bereitstellung von IntelliSense bei der manuellen Eingabe der notwendigen Elemente.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_05\/pic_55_002.png\" alt=\"Hinzuf&uuml;gen eines leeren Ribbons\" width=\"599,593\" height=\"510,049\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Hinzuf&uuml;gen eines leeren Ribbons<\/span><\/b><\/p>\n<h2>Tab-Element hinzuf&uuml;gen<\/h2>\n<p>Ein Ribbon-Tab legen Sie &uuml;ber das <b>RibbonTab<\/b>-Element an, nicht wie unter Office mit dem <b>tab<\/b>-Element:<\/p>\n<pre>&lt;Ribbon&gt;\r\n     &lt;RibbonTab Header=\"Ribbontab\"&gt;&lt;\/RibbonTab&gt;\r\n&lt;\/Ribbon&gt;<\/pre>\n<p>Grunds&auml;tzlich finden Sie die Ribbon-spezifischen Elemente alle schnell, wenn Sie mit IntelliSense-Unterst&uuml;tzung direkt die Zeichenfolge <b>Ribbon&#8230; <\/b>eingeben (siehe Bild 3). Hier tauchen dann auch schnell die bekannten Elemente wie <b>RibbonButton<\/b>, <b>RibbonGroup<\/b> und so weiter auf.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_05\/pic_55_003.png\" alt=\"Zugriff auf die Ribbon-Elemente per IntelliSense\" width=\"599,593\" height=\"381,944\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Zugriff auf die Ribbon-Elemente per IntelliSense<\/span><\/b><\/p>\n<h2>Schaltfl&auml;che hinzuf&uuml;gen<\/h2>\n<p>F&uuml;gen wir als N&auml;chstes eine Schaltfl&auml;che hinzu. Wenn wir nicht achtgeben und das <b>RibbonButton<\/b>-Element au&szlig;erhalb des <b>RibbonTab<\/b>-Elements im XAML-Code hinzuf&uuml;gen, geschieht tats&auml;chlich das, was Sie in Bild 4 sehen: Das <b>RibbonButton<\/b>-Element wird oben neben dem Ribbon-Registerreiter angelegt. Ob und wozu man das braucht, erkl&auml;rt sich nicht &#8211; wir wollen uns aber an den gewohnten Strukturen aus dem Office-Bereich orientieren. Also f&uuml;gen wir das <b>RibbonButton<\/b>-Element auch nicht einfach in das <b>RibbonTab<\/b>-Element ein, sondern f&uuml;gen zun&auml;chst ein <b>RibbonGroup<\/b>-Element hinzu. Grunds&auml;tzlich kann man sich als Access-Entwickler, der sich schon einmal mit der Programmierung des Ribbons besch&auml;ftigt hat, merken, dass die bekannten Elemente alle mit dem Pr&auml;fix <b>Ribbon&#8230; <\/b>ausgestattet wurden (also <b>RibbonTab<\/b> statt <b>tab<\/b>, <b>RibbonGroup <\/b>statt <b>group <\/b>et cetera).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_05\/pic_55_004.png\" alt=\"Ein Ribbon-Button au&szlig;erhalb eines Tab-Elements\" width=\"599,593\" height=\"306,5714\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Ein Ribbon-Button au&szlig;erhalb eines Tab-Elements<\/span><\/b><\/p>\n<p>Ein <b>RibbonTab<\/b>-Element mit zwei <b>RibbonGroup<\/b>&#8211; und je drei <b>RibbonButton<\/b>-Elementen definieren wir schlie&szlig;lich wie in Listing 1.<\/p>\n<pre>&lt;Ribbon Title=\"Beispielribbon\"&gt;\r\n   &lt;RibbonTab Header=\"Ribbontab\"&gt;\r\n     &lt;RibbonGroup Header=\"Ribbongruppe 1\"&gt;\r\n       &lt;RibbonButton Label=\"Beispielbutton 1\"&gt;&lt;\/RibbonButton&gt;\r\n       &lt;RibbonButton Label=\"Beispielbutton 2\"&gt;&lt;\/RibbonButton&gt;\r\n       &lt;RibbonButton Label=\"Beispielbutton 3\"&gt;&lt;\/RibbonButton&gt;\r\n     &lt;\/RibbonGroup&gt;\r\n     &lt;RibbonGroup Header=\"Ribbongruppe 2\"&gt;\r\n       &lt;RibbonButton Label=\"Beispielbutton 4\"&gt;&lt;\/RibbonButton&gt;\r\n       &lt;RibbonButton Label=\"Beispielbutton 5\"&gt;&lt;\/RibbonButton&gt;\r\n       &lt;RibbonButton Label=\"Beispielbutton 6\"&gt;&lt;\/RibbonButton&gt;\r\n     &lt;\/RibbonGroup&gt;\r\n   &lt;\/RibbonTab&gt;\r\n&lt;\/Ribbon&gt;<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Code f&uuml;r ein Ribbon mit zwei Gruppen und einigen Schaltlf&auml;chen<\/span><\/b><\/p>\n<p>Das Ergebnis nach einem Klick auf die Taste <b>F5<\/b> zum Start des Debuggers zeigt Bild 5. Es gibt ein paar Besonderheiten, die wir an dieser Stelle kl&auml;ren wollen: Zun&auml;chst k&ouml;nnen Sie bereits f&uuml;r das <b>Ribbon<\/b>-Element mit dem Attribut <b>Title <\/b>eine &Uuml;berschrift festlegen, die dann in der Abbildung beispielsweise <b>Beispielribbon <\/b>lautet. Dies ist unter Office so nicht m&ouml;glich. Die zweite Besonderheit ist, dass es f&uuml;r die Beschriftungen so viele verschiedene Attribute gibt. Beim <b>Ribbon<\/b>-Element selbst hei&szlig;t sie <b>Title<\/b>, beim <b>RibbonTab <\/b>und bei der <b>RibbonGroup <\/b>lautet das Attribut <b>Header <\/b>und bei der Schaltfl&auml;che (<b>RibbonButton<\/b>) hei&szlig;t sie schlie&szlig;lich <b>Label<\/b>. Der Hintergrund sind die verschiedenen Basis-Elemente, von denen die Ribbon-Elemente erben. Wenn man das erstmal herausgefunden hat, gew&ouml;hnt man sich allerdings recht schnell daran.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_05\/pic_55_005.png\" alt=\"Ein Ribbon in einer laufenden Anwendung\" width=\"424,7115\" height=\"172,7914\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Ein Ribbon in einer laufenden Anwendung<\/span><\/b><\/p>\n<h2>Bilder im WPF-Ribbon<\/h2>\n<p>Bevor wir uns um die Funktionalit&auml;t k&uuml;mmern, also um die Ereignisse der einzelnen Ribbon-Elemente, wollen wir noch f&uuml;r eine etwas schickere Optik sorgen. Dazu geh&ouml;ren im Ribbon nat&uuml;rlich ein paar Icons. Im Gegensatz zu Access (und den &uuml;brigen Office-Anwendungen), wo einiges an Code ben&ouml;tigt wird, um Bilder im Ribbon anzuzeigen, gelingt dies unter WPF relativ einfach. Dazu f&uuml;gen Sie zun&auml;chst die gew&uuml;nschten Icons zum Projekt hinzu, indem Sie diese einfach in das Projekt im Projektmappen-Explorer ziehen. Bevor Sie damit beginnen, sollten Sie sich &uuml;berlegen, ob Sie f&uuml;r Bilddateien nicht einen eigenen Ordner innerhalb des Projekts anlegen sollen. Dies erledigen Sie &uuml;ber den Kontextmen&uuml;-Eintrag <b>Hinzuf&uuml;gen|Neuer Ordner <\/b>des Projekt-Elements. Den neuen Ordner k&ouml;nnen Sie beispielsweise <b>Images <\/b>nennen. Danach ziehen wir einige Bilddateien aus dem Windows Explorer in dieses Verzeichnis. Sammlungen solcher Icons k&ouml;nnen Sie im Internet kostenlos finden, f&uuml;r hochwertige Kollektionen wie etwa von <b>iconexperience.com <\/b>m&uuml;ssen Sie jedoch ein paar Euro hinlegen.<\/p>\n<p>Der neue Ordner <b>Images <\/b>mit einigen Bildern sieht dann so wie in Bild 6 aus. Wenn Sie die Eintr&auml;ge mit der Maus &uuml;berfahren, blendet Visual Studio eine Vorschau der jeweiligen Bilder ein. Nun wollen wir die Bilder auch im Ribbon anzeigen, zun&auml;chst als Symbol f&uuml;r die Schaltfl&auml;chen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_05\/pic_55_006.png\" alt=\"Bilder f&uuml;r die Anzeige im Ribbon im Projekt-Explorer\" width=\"424,7115\" height=\"430,0204\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Bilder f&uuml;r die Anzeige im Ribbon im Projekt-Explorer<\/span><\/b><\/p>\n<p>Dazu f&uuml;gen wir den Schaltfl&auml;chen eines der beiden Attribute <b>SmallImageSource <\/b>oder <b>LargeImageSource <\/b>hinzu und legen den Namen der Bilddatei inklusive Verzeichnis als Wert fest. Dies sieht beispielsweise wie folgt aus:<\/p>\n<pre>&lt;RibbonButton Label=\"Beispielbutton 1\" \r\n     LargeImageSource=\"Images\\apple.png\" \/&gt;\r\n...\r\n&lt;RibbonButton Label=\"Beispielbutton 4\" \r\n    SmallImageSource=\"Images\\ice_cream2.png\" \/&gt;<\/pre>\n<p>In der Anwendung erscheinen die Bilder in den veschiedenen Gr&ouml;&szlig;en dann wie in Bild 7. Wir haben hier ausschlie&szlig;lich Bilder der Gr&ouml;&szlig;e 32&#215;32 verwendet. &Uuml;blicherweise verwendet man f&uuml;r das Attribut <b>LargeImageSource <\/b>Bilddateien dieser Gr&ouml;&szlig;e, f&uuml;r das Attribut <b>SmallImageSource <\/b>nutzt man Bilder der Gr&ouml;&szlig;e 16&#215;16. Die Bilder werden aber bei Bedarf herunterskaliert. Wenn Sie &uuml;ber eine Icon-Sammlung mit Icons in diesen beiden Gr&ouml;&szlig;en verf&uuml;gen, sollten Sie jeweils die korrekte Gr&ouml;&szlig;e f&uuml;r die entsprechenden Attribute verwenden.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_05\/pic_55_007.png\" alt=\"Ribbon-Schaltfl&auml;chen mit einigen Bildern\" width=\"499,6607\" height=\"168,416\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Ribbon-Schaltfl&auml;chen mit einigen Bildern<\/span><\/b><\/p>\n<p>Dazu m&uuml;ssen Sie dann zum Dateinamen der Elemente im Ordner <b>Images <\/b>noch ein Suffix wie etwa <b>_small <\/b>hinzuf&uuml;gen.<\/p>\n<h2>Ribbon-Titelzeile entfernen<\/h2>\n<p>Die Zeile, die durch das Ribbon-Element selbst repr&auml;sentiert wird, k&ouml;nnen Sie mit einem Trick entfernen. Dazu &auml;ndern Sie den Typ des Fenster-Objekts von <b>Window <\/b>auf <b>RibbonWindow<\/b>. Dazu sind drei Schritte n&ouml;tig.<\/p>\n<p>Der erste Schritt ist das Hinzuf&uuml;gen der Klasse mit einer entsprechenden <b>using<\/b>-Anweisung in der Code behind-Klasse des Fensters:<\/p>\n<pre>using System.Windows.Controls.Ribbon;<\/pre>\n<p>Danach &auml;ndern Sie den Typ der Basisklasse von <b>MainWindow <\/b>von <b>Window <\/b>auf <b>RibbonWindow<\/b>, sodass der Inhalt der Code behind-Klasse nun wie folgt aussieht:<\/p>\n<pre>namespace RibbonMitWPF {\r\n     public partial class MainWindow : RibbonWindow {\r\n         public MainWindow() {\r\n             InitializeComponent();\r\n         }\r\n     }\r\n}<\/pre>\n<p>Schlie&szlig;lich ziehen Sie diese &Auml;nderung auch im XAML-Code dieser Klasse nach. Dazu &auml;ndern Sie das oberste Element ebenfalls von Window in <b>RibbonWindow<\/b>:<\/p>\n<pre>&lt;RibbonWindow ... Title=\"MainWindow\" Height=\"350\" Width=\"625\"&gt;\r\n     &lt;Grid&gt;\r\n     ...<\/pre>\n<p>Wenn Sie die vorherige Ansicht und die aktuelle Version vergleichen, stellen Sie fest, dass die Zeile mit dem Text <b>Beispielribbon <\/b>weggefallen ist (siehe Bild 8). &Uuml;brigens: Wenn Sie das <b>Title<\/b>-Attribut des <b>RibbonWindow<\/b>-Elements in diesem Fall leer lassen, zeigt der Titel den Inhalt der Eigenschaft <b>Header <\/b>des <b>Ribbon<\/b>-Elements an.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_05\/pic_55_008.png\" alt=\"Ribbon mit und ohne Titelleiste\" width=\"649,559\" height=\"238,5237\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Ribbon mit und ohne Titelleiste<\/span><\/b><\/p>\n<p>Das Icon der Titelleiste des Fensters k&ouml;nnen Sie in diesem Fall durch Setzen des Attributs <b>WindowIconVisibility <\/b>auf den Wert <b>Collapsed <\/b>verschwinden lassen:<\/p>\n<pre>&lt;Ribbon Title=\"Beispielribbon\" \r\n     WindowIconVisibility=\"Collapsed\"&gt;<\/pre>\n<h2>Schnellzugriffsleiste nutzen<\/h2>\n<p>Warum aber sollte man diesen Bereich &uuml;berhaupt erhalten Nun: Wenn Sie Access-Ribbons gewohnt sind, wissen Sie, dass dort oben in der Regel die Schnellzugriffsleiste untergebracht ist, die einige Standardbefehle wie <b>Wiederholen <\/b>oder <b>R&uuml;ckg&auml;ngig <\/b>enth&auml;lt. Sie k&ouml;nnten also durchaus auch selbst einige solcher Befehle dort unterbringen, die immer sichtbar sind &#8211; unabh&auml;ngig davon, welches <b>RibbonTab<\/b>-Element gerade aktiviert ist. Um Elemente zur Schnellstartleiste hinzuzuf&uuml;gen, legen Sie unterhalb des <b>Ribbon<\/b>-Elements ein Element namens <b>Ribbon.QuickAccessToolbar <\/b>an, dem Sie wiederum das Element <b>RibbonQuickAccessToolbar <\/b>unterordnen. Darin finden schlie&szlig;lich die gew&uuml;nschten Steuerelemente Platz (siehe Bild 9):<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_05\/pic_55_009.png\" alt=\"Ribbon mit Elementen in der Schnellzugriffsleiste\" width=\"549,6265\" height=\"149,4297\" \/><\/p>\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\/55000055\/\">\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\/55000055?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\/55000055\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"9f18b59416\"\/>\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>Der geneigte Access-Entwickler wei&szlig; mit dem Begriff Ribbon nat&uuml;rlich etwas anzufangen. Aber gibt es so etwas auch f&uuml;r .NET-Anwendungen Ist das nicht ein reines Office-Feature Immerhin gibt es ja auch in der Benutzeroberfl&auml;che von Visual Studio kein Ribbon, sondern eine Men&uuml;leiste und Symbolleisten, wie Sie sie von &auml;lteren Office-Versionen bis Office 2003 kennen (man munkelt, einige Entwickler w&uuml;nschten sich die Men&uuml;leisten zur&uuml;ck &#8230;). In diesem Artikel schauen wir uns an, wie weit es mit dem Ribbon unter .NET und speziell unter WPF bestellt ist und welche Unterst&uuml;tzung uns Visual Studio f&uuml;r die Programmierung von Ribbons bietet.<\/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":[662016,66052016,44000002,44000023,44000036,44000007],"tags":[],"yst_prominent_words":[],"class_list":["post-55000055","post","type-post","status-publish","format-standard","hentry","category-662016","category-66052016","category-Benutzeroberflaeche_mit_WPF","category-PowerApps","category-Ribbon_programmieren","category-Von_Access_zu_WPF"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000055","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=55000055"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000055\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000055"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000055"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000055"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000055"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}