{"id":55000216,"date":"2020-04-01T00:00:00","date_gmt":"2020-08-25T08:51:15","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=216"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Steuerelemente_mit_Stil","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Steuerelemente_mit_Stil\/","title":{"rendered":"Steuerelemente mit Stil"},"content":{"rendered":"<p><b>Visual Studio und WPF bieten verschiedene M&ouml;glichkeiten, um das Aussehen von Steuerelementen zu beeinflussen. Sie k&ouml;nnen die Eigenschaften &uuml;ber das Eigenschaftsfenster &auml;ndern, die Werte der Attribute direkt f&uuml;r das jeweilige Element im XAML-Code definieren oder auch Stilvorlagen festlegen, die entweder f&uuml;r alle betroffenen Elemente in der Anwendung g&uuml;ltig sind oder auch nur f&uuml;r ein bestimmtes Objekt wie ein Fenster oder eine Seite. Dieser Artikel beschreibt die verschiedenen M&ouml;glichkeiten, wie Sie die Steuer-elemente Ihrer Anwendung anpassen k&ouml;nnen.<\/b><\/p>\n<p><b>Eigenschaften per Eigenschaftsfenster<\/b><\/p>\n<p>Der offensichtlichste Weg, um Eigenschaften f&uuml;r Steuer-elemente einzustellen, ist das Eigenschaftsfenster. Bei einem Button-Element ben&ouml;tigen Sie meist die Eigenschaften der Kategorie Layout (siehe Bild 1). Sie k&ouml;nnen ein oder mehrere Steuer-elemente markieren, deren Eigenschaften Sie einstellen m&ouml;chten &#8211; die eingegebenen Werte werden dann auf alle aktuell markierten Steuer-elemente angewendet. Weisen Steuer-elemente unterschiedliche Werte f&uuml;r eine der Eigenschaften auf, werden die Eigenschaftswerte nicht angezeigt.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_02\/pic_216_001.png\" alt=\"Einstellen per Eigenschaftsfenster\" width=\"649,559\" height=\"639,3805\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Einstellen per Eigenschaftsfenster<\/span><\/b><\/p>\n<p><b>Eigenschaften je Steuer-element per XAML<\/b><\/p>\n<p>Die &Auml;nderungen der Werte im Eigenschaftsfenster wirken sich unmittelbar auf den XAML-Code des Steuerelements aus. Der XAML-Code enth&auml;lt nach dem Einf&uuml;gen eines Steuer-elements zun&auml;chst einen minimalen Satz von Eigenschaften. Alle Eigenschaften, die nicht als Attribut mit dem Steuer-element aufgef&uuml;hrt werden, enthalten implizit den Standardwert.<\/p>\n<p><b>Einheitliche Eigenschaften f&uuml;r mehrere Steuerelemente<\/b><\/p>\n<p>Sie k&ouml;nnen die Attribute nat&uuml;rlich auch direkt im XAML-Code anpassen. Damit erreichen Sie dann umgekehrt auch eine Anpassung der Werte im Eigenschaftsfenster. Bevor Sie ein Attribut f&uuml;r genau ein Steuer-element anpassen, pr&uuml;fen Sie, ob diese Anpassung wirklich nur f&uuml;r dieses Steuer-element relevant ist. Wenn Sie etwa die <b>Padding<\/b>-Eigenschaft &auml;ndern, die den Abstand vom Inhalt zu den Begrenzungen des Steuerelements festlegt, sollten Sie sicher sein, dass diese Eigenschaft wirklich nur explizit f&uuml;r ein Steuer-element ge&auml;ndert werden soll. Alternativ k&ouml;nnen Sie in Erw&auml;gung ziehen, dass es mehrere gleichartige Steuer-elemente gibt, f&uuml;r die Sie diese Eigenschaft einheitlich gestalten wollen. Nat&uuml;rlich gibt es Eigenschaften, die tats&auml;chlich nur ein Steuer-element betreffen &#8211; zum Beispiel die Beschriftung oder die Namen von Ereignisroutinen, die Sie f&uuml;r die Ereignisattribute angeben. Und auch der Steuerelementname ist nat&uuml;rlich ein individuelles Attribut, das Sie, wenn n&ouml;tig, f&uuml;r jedes Steuerelement einzeln festlegen.<\/p>\n<p><b>Das Style-Element<\/b><\/p>\n<p>Wenn es jedoch Attribute gibt, die Sie f&uuml;r eine Gruppe von Steuerelementen festlegen wollen, dann k&ouml;nnen Sie ein m&auml;chtiges Feature von WPF nutzen: das <b>Style<\/b>-Element. Der wichtigste Nutzen von <b>Style<\/b>-Elementen ist, Attribute zu definieren, die Sie Steuerelementen zuweisen k&ouml;nnen, statt die Attribute f&uuml;r jedes Steuer-element einzeln zu definieren. Wenn wir zwei Schaltfl&auml;chen mit den Attributen <b>Padding <\/b>und <b>Margin <\/b>ausstatten wollen, k&ouml;nnen wir das f&uuml;r jede Schaltfl&auml;che individuell erledigen:<\/p>\n<pre>&lt;StackPanel Orientation=\"Horizontal\"&gt;\r\n     &lt;Button Padding=\"3\" Margin=\"3\"&gt;Schaltfl&auml;che 1&lt;\/Button&gt;\r\n     &lt;Button Padding=\"3\" Margin=\"3\"&gt;Schaltfl&auml;che 2&lt;\/Button&gt;\r\n&lt;\/StackPanel&gt;<\/pre>\n<p>Der direkteste Weg, Attribute f&uuml;r mehrere Steuer-elemente zu definieren, ist ein Style, den Sie im &uuml;bergeordneten Element festlegen. Im folgenden Beispiel haben wir dem <b>StackPanel<\/b>-Element, in dem sich die betroffenen Steuer-elemente befinden, ein <b>StackPanel.Resources<\/b>-Element hinzugef&uuml;gt. Dieses enth&auml;lt ein <b>Style<\/b>-Element, f&uuml;r das wir den <b>x:Key <\/b>namens <b>buttonStyle <\/b>angegeben haben. Damit kann der Style referenziert werden. Hier haben wir zwei <b>Setter<\/b>-Elemente eingef&uuml;gt. Das <b>Setter<\/b>-Element gibt mit <b>Property <\/b>das Attribut an und mit <b>Value <\/b>den zu verwendenden Wert. Wichtig bei dieser Variante ist, dass wir dem Attributnamen die <b>Control<\/b>-Klasse voranstellen (<b>Control.Margin<\/b>).<\/p>\n<p>Damit die Attribute auf die <b>Button<\/b>-Elemente angewendet werden, weisen wir diesen den Style explizit mit <b>Style=&#8221;{StaticResource buttonStyle}&#8221; <\/b>zu:<\/p>\n<pre>&lt;StackPanel Grid.Row=\"1\" Orientation=\"Horizontal\"&gt;\r\n     &lt;StackPanel.Resources&gt;\r\n         &lt;Style x:Key=\"buttonStyle\"&gt;\r\n             &lt;Setter Property=\"Control.Margin\" Value=\"3\" \/&gt;\r\n             &lt;Setter Property=\"Control.Padding\" Value=\"3\" \/&gt;\r\n         &lt;\/Style&gt;\r\n     &lt;\/StackPanel.Resources&gt;\r\n     &lt;Button Style=\"{StaticResource buttonStyle}\"&gt;Schaltfl&auml;che 1&lt;\/Button&gt;\r\n     &lt;Button Style=\"{StaticResource buttonStyle}\"&gt;Schaltfl&auml;che 2&lt;\/Button&gt;\r\n&lt;\/StackPanel&gt;<\/pre>\n<p>Die Schaltfl&auml;chen sehen nun genauso aus wie die aus dem vorherigen Beispiel. Wenn wir wie in diesem Beispiel nur zwei Schaltfl&auml;chen mit zwei Attributen ausstatten wollen, scheint dies &uuml;bertriebener Aufwand zu sein. Allerdings brauchen Sie schon die erste &Auml;nderung nur noch an einer Stelle auszuf&uuml;hren. Umso mehr Attribute es gibt und je mehr Steuerelementen Sie diese zuweisen, umso mehr lohnt sich das Anlegen von <b>Style<\/b>-Elementen.<\/p>\n<p><b>Styles vererben<\/b><\/p>\n<p>Wenn Sie beispielsweise zwei verschiedene Typen von Schaltfl&auml;chen in Ihren Fenstern verwenden wollen, von denen einige die Beschriftung in normaler Breite anzeigen, andere jedoch eine fette Schrift verwenden sollen, m&uuml;ssen Sie keine zwei <b>Style<\/b>-Elemente anlegen, wobei das zweite <b>Style<\/b>-Element nochmal alle Eigenschaften enth&auml;lt, die das erste bereits definiert hat. Stattdessen gehen wir wie folgt vor und behalten das <b>Style<\/b>-Element namens <b>buttonStyle <\/b>bei. Au&szlig;erdem legen wir ein weiteres <b>Style<\/b>-Element namens <b>buttonStyleBold <\/b>an, das nur die Eigenschaft <b>FontWeight <\/b>auf den Wert <b>Bold <\/b>festlegt. Damit dieses <b>Style<\/b>-Element auf dem <b>Style<\/b>-Element <b>buttonStyle <\/b>aufbaut, f&uuml;gen wir diesem das Attribut <b>BasedOn <\/b>hinzu und stellen es auf den Namen des ersten <b>Style<\/b>-Elements ein, also <b>buttonStyle<\/b>. Den beiden Schaltfl&auml;chen weisen wir dann einmal <b>buttonStyle <\/b>und einmal <b>buttonStyleBold <\/b>zu:<\/p>\n<pre>&lt;StackPanel Grid.Row=\"2\" Orientation=\"Horizontal\"&gt;\r\n     &lt;StackPanel.Resources&gt;\r\n         &lt;Style x:Key=\"buttonStyle\"&gt;\r\n             &lt;Setter Property=\"Control.Margin\" Value=\"3\" \/&gt;\r\n             &lt;Setter Property=\"Control.Padding\" Value=\"3\" \/&gt;\r\n         &lt;\/Style&gt;\r\n         &lt;Style x:Key=\"buttonStyleBold\" BasedOn=\"{StaticResource buttonStyle}\"&gt;\r\n             &lt;Setter Property=\"Control.FontWeight\" Value=\"Bold\" \/&gt;\r\n         &lt;\/Style&gt;\r\n     &lt;\/StackPanel.Resources&gt;\r\n     &lt;Button Style=\"{StaticResource buttonStyle}\"&gt;Schaltfl&auml;che 1&lt;\/Button&gt;\r\n     &lt;Button Style=\"{StaticResource buttonStyleBold}\"&gt;Schaltfl&auml;che 2&lt;\/Button&gt;\r\n&lt;\/StackPanel&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\/55000216\/\">\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\/55000216?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\/55000216\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"123b777de9\"\/>\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>Visual Studio und WPF bieten verschiedene M&ouml;glichkeiten, um das Aussehen von Steuerelementen zu beeinflussen. Sie k&ouml;nnen die Eigenschaften &uuml;ber das Eigenschaftsfenster &auml;ndern, die Werte der Attribute direkt f&uuml;r das jeweilige Element im XAML-Code definieren oder auch Stilvorlagen festlegen, die entweder f&uuml;r alle betroffenen Elemente in der Anwendung g&uuml;ltig sind oder auch nur f&uuml;r ein bestimmtes Objekt wie ein Fenster oder eine Seite. Dieser Artikel beschreibt die verschiedenen M&ouml;glichkeiten, wie Sie die Steuer-elemente Ihrer Anwendung anpassen k&ouml;nnen.<\/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":[66022020,662020,44000025,44000015],"tags":[],"yst_prominent_words":[],"class_list":["post-55000216","post","type-post","status-publish","format-standard","hentry","category-66022020","category-662020","category-VBAProgrammierung","category-WPFSteuerelemente"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000216","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=55000216"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000216\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000216"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000216"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000216"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000216"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}