{"id":55000280,"date":"2021-08-01T00:00:00","date_gmt":"2021-12-31T14:21:16","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=280"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Das_WPFSteuerelement_CheckBox","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Das_WPFSteuerelement_CheckBox\/","title":{"rendered":"Das WPF-Steuerelement CheckBox"},"content":{"rendered":"<p><b>&#8220;Ja oder Nein &#8211; das ist hier die Frage!&#8221; Oder doch vielleicht Wenn es um ein Steuerelement f&uuml;r Ja oder Nein, Wahr oder Falsch, 0 oder -1 geht, ist das Kontrollk&auml;stchen die erste Wahl. Oder, wie es in WPF hei&szlig;t: CheckBox. Mit dem CheckBox-Steuerelement lassen sich &uuml;blicherweise zwei Zust&auml;nde abbilden, die entweder durch einen Haken oder eben durch ein leeres K&auml;stchen dargestellt werden. Ganz nebenbei bemerkt, kann man Kontrollk&auml;stchen auch noch f&uuml;r einen dritten Zustand verwenden, n&auml;mlich Null oder Nothing &#8211; je nach Programmiersprache. Dieser Artikel zeigt, was Sie mit dem CheckBox-Steuerelement von WPF  anstellen k&ouml;nnen.<\/b><\/p>\n<p>Das <b>CheckBox<\/b>-Steuerelement ist, was die M&ouml;glichkeiten f&uuml;r den Inhalt angeht, eines der einfacheren Steuerelemente von WPF &#8211; zumindest unter den Steuerelementen, die Sie an Daten binden k&ouml;nnen. Warum wir dieses erst im f&uuml;nften Jahr dieses Magazins untersuchen, kann nur daran liegen, dass es so einfach scheint &#8211; dabei gibt es durchaus Eigenschaften, die nicht offensichtlich sind und die wir in diesem Artikel genauer untersuchen wollen.<\/p>\n<p>Das wir das <b>CheckBox<\/b>-Steuerelement nun unter die Lupe nehmen, liegt daran, dass wir in einem anderen Artikel eine wichtige Eigenschaft ben&ouml;tigten, n&auml;mlich den dreifachen Zustand: Ist dieser aktiviert, kann das Steuerelement nicht nur die Werte Wahr und Falsch abbilden, sondern auch noch einen dritten Wert, der &#8220;nicht Wahr und nicht Falsch&#8221; oder auch <b>Null <\/b>(unter C#) oder <b>Nothing <\/b>(unter Visual Basic) lautet. Diesen ben&ouml;tigten wir in einer Suche, wo wir Kunden danach filtern wollten, ob sie einen Newsletter abonniert haben oder nicht. Und nat&uuml;rlich sollte die Suche auch erm&ouml;glichen, alle Kunden anzuzeigen, also mit und ohne Newsletterabonnement. Genau dazu brauchten wir den dritten Zustand des Kontrollk&auml;stchens. Doch eins nach dem anderen!<\/p>\n<h2>CheckBox-Steuerelement anlegen<\/h2>\n<p>Das <b>CheckBox<\/b>-Steuerelement legen Sie wie alle anderen Steuerelemente auch durch ein entsprechendes XAML-Element an, das logischerweise <b>CheckBox <\/b>hei&szlig;t und mit x:Name einen Namen erh&auml;lt, hier <b>chkBeispiel<\/b>:<\/p>\n<pre>&lt;Grid&gt;\r\n     &lt;CheckBox x:Name=\"chkBeispiel\"&gt;&lt;\/CheckBox&gt;\r\n&lt;\/Grid&gt;<\/pre>\n<p>Ohne weitere Elemente oder Formatierungen erscheint diese allerdings einfach links oben im Fenster (siehe Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_04\/pic_280_001.png\" alt=\"Einfache CheckBox\" width=\"549,6265\" height=\"178,3183\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Einfache CheckBox<\/span><\/b><\/p>\n<h2>Beschriftung hinzuf&uuml;gen<\/h2>\n<p>Hier fehlt zumindest eine Beschriftung, die wir per <b>Label<\/b>-Element hinzuf&uuml;gen. Damit die beiden Elemente nebeneinander erscheinen, fassen wir diese in einem <b>StackPanel<\/b>-Element mit horizontaler Ausrichtung zusammen:<\/p>\n<pre>&lt;StackPanel Orientation=\"Horizontal\"&gt;\r\n     &lt;Label&gt;Beispiel-Checkbox:&lt;\/Label&gt;\r\n     &lt;CheckBox x:Name=\"chkBeispiel\"&gt;&lt;\/CheckBox&gt;\r\n&lt;\/StackPanel&gt;<\/pre>\n<h2>CheckBox-Elemente ausrichten<\/h2>\n<p>Damit erscheint die <b>CheckBox <\/b>allerdings nicht korrekt ausgerichtet (siehe Bild 2). Damit das geschieht, erstellen wir erstens einen Satz von <b>RowDefinition<\/b>-Elementen f&uuml;r das <b>Grid<\/b>, von denen die H&ouml;he der ersten Zeile automatisch an den Inhalt angepasst werden soll. Zweitens stellen f&uuml;r das <b>CheckBox<\/b>-Element das Attribut <b>VerticalAlignment <\/b>auf den Wert <b>Center <\/b>ein:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_04\/pic_280_002.png\" alt=\"CheckBox mit Label\" width=\"424,6267\" height=\"145,618\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: CheckBox mit Label<\/span><\/b><\/p>\n<pre>&lt;Grid.RowDefinitions&gt;\r\n     &lt;RowDefinition Height=\"Auto\"&gt;&lt;\/RowDefinition&gt;\r\n     &lt;RowDefinition Height=\"*\"&gt;&lt;\/RowDefinition&gt;\r\n&lt;\/Grid.RowDefinitions&gt;\r\n&lt;StackPanel Orientation=\"Horizontal\"&gt;\r\n     &lt;Label&gt;Beispiel-Checkbox:&lt;\/Label&gt;\r\n     &lt;CheckBox x:Name=\"chkBeispiel\" VerticalAlignment=\"Center\"&gt;&lt;\/CheckBox&gt;\r\n&lt;\/StackPanel&gt;<\/pre>\n<p>Das Ergebnis entspricht schon eher unseren W&uuml;nschen (siehe Bild 3). <\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_04\/pic_280_003.png\" alt=\"Vertikal ausgerichtete CheckBox mit Label\" width=\"424,6267\" height=\"144,2906\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Vertikal ausgerichtete CheckBox mit Label<\/span><\/b><\/p>\n<h2>Mehrere CheckBox-Elemente ausrichten<\/h2>\n<p>Wollen Sie jedoch mehrere Kontrollk&auml;stchen untereinander darstellen, wobei die Beschriftungen links und die Kontrollk&auml;stchen b&uuml;ndig dargestellt werden, ben&ouml;tigen wir eine Erweiterung des <b>Grid<\/b>-Elements um zwei Spalten. Daf&uuml;r werfen wir das <b>StackPanel<\/b>-Element &uuml;ber Bord und teilen die <b>Label<\/b>&#8211; und <b>CheckBox<\/b>-Elemente auf die Zellen des Grids auf:<\/p>\n<pre>&lt;Grid.RowDefinitions&gt;\r\n     &lt;RowDefinition Height=\"Auto\"&gt;&lt;\/RowDefinition&gt;\r\n     &lt;RowDefinition Height=\"Auto\"&gt;&lt;\/RowDefinition&gt;\r\n     &lt;RowDefinition Height=\"*\"&gt;&lt;\/RowDefinition&gt;\r\n&lt;\/Grid.RowDefinitions&gt;\r\n&lt;Grid.ColumnDefinitions&gt;\r\n     &lt;ColumnDefinition Width=\"Auto\"&gt;&lt;\/ColumnDefinition&gt;\r\n     &lt;ColumnDefinition Width=\"*\"&gt;&lt;\/ColumnDefinition&gt;\r\n&lt;\/Grid.ColumnDefinitions&gt;\r\n&lt;Label&gt;Beispiel-Checkbox:&lt;\/Label&gt;\r\n&lt;CheckBox x:Name=\"chkBeispiel\" Grid.Column=\"1\" VerticalAlignment=\"Center\"&gt;&lt;\/CheckBox&gt;\r\n&lt;Label Grid.Row=\"1\"&gt;Zweite Checkbox:&lt;\/Label&gt;\r\n&lt;CheckBox x:Name=\"chkZwei\" Grid.Row=\"1\" Grid.Column=\"1\" VerticalAlignment=\"Center\"&gt;&lt;\/CheckBox&gt;<\/pre>\n<p>Damit erhalten wir dann die ordentlich ausgerichteten <b>Label<\/b>&#8211; und <b>CheckBox<\/b>-Elemente aus Bild 4.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_04\/pic_280_004.png\" alt=\"Mehrere ausgerichtete CheckBox-Elemente\" width=\"424,6267\" height=\"157,0685\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Mehrere ausgerichtete CheckBox-Elemente<\/span><\/b><\/p>\n<h2>CheckBox-Elemente links vom Label darstellen<\/h2>\n<p>Nat&uuml;rlich k&ouml;nnen Sie diese auch andersherum darstellen, also die <b>CheckBox<\/b>-Elemente auf der linken Seite platzieren. Auch das ist durchaus &uuml;blich, zumindest, wenn nur <b>CheckBox<\/b>-Elemente verwendet werden.<\/p>\n<p>Das h&auml;tte auch den Vorteil, dass die <b>CheckBox<\/b>&#8211; und die <b>Label<\/b>-Elemente auch bei Verwendung von <b>StackPanel<\/b>-Elementen immer korrekt ausgerichtet sind:<\/p>\n<pre>&lt;StackPanel Orientation=\"Vertical\"&gt;\r\n     &lt;StackPanel Orientation=\"Horizontal\"&gt;\r\n         &lt;CheckBox x:Name=\"chkBeispiel\" VerticalAlignment=\"Center\"&gt;&lt;\/CheckBox&gt;\r\n         &lt;Label&gt;Beispiel-Checkbox&lt;\/Label&gt;\r\n     &lt;\/StackPanel&gt;\r\n     &lt;StackPanel Orientation=\"Horizontal\"&gt;\r\n         &lt;CheckBox x:Name=\"chkZwei\" VerticalAlignment=\"Center\"&gt;&lt;\/CheckBox&gt;\r\n         &lt;Label&gt;Zweite Checkbox&lt;\/Label&gt;\r\n     &lt;\/StackPanel&gt;\r\n&lt;\/StackPanel&gt;<\/pre>\n<p>Das Ergebnis finden Sie in Bild 5.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_04\/pic_280_005.png\" alt=\"CheckBox-Elemente auf der linken Seite\" width=\"424,6267\" height=\"148,7329\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: CheckBox-Elemente auf der linken Seite<\/span><\/b><\/p>\n<p>Das gelingt allerdings auch noch einfacher, denn wir k&ouml;nnen die Beschriftung in diesem Fall auch als Inhalt des CheckBox-Elements angeben. Der Code dazu sieht so aus:<\/p>\n<pre>&lt;StackPanel Orientation=\"Vertical\"&gt;\r\n     &lt;CheckBox x:Name=\"chkBeispiel\"&gt;Beispiel-CheckBox&lt;\/CheckBox&gt;\r\n     &lt;CheckBox x:Name=\"chkZwei\"&gt;Zweite Checkbox&lt;\/CheckBox&gt;\r\n&lt;\/StackPanel&gt;<\/pre>\n<h2>Verschiedene Zust&auml;nde der CheckBox per XAML einstellen<\/h2>\n<p>Wie weiter oben erw&auml;hnt, kann das <b>CheckBox<\/b>-Steuerelement drei verschiedene Status einnehmen. Diese legen Sie im XAML-Code mit dem Attribut <b>IsChecked <\/b>fest. Die drei m&ouml;glichen Werte lauten dort:<\/p>\n<ul>\n<li><b>True<\/b>: Wahr, Ja, -1<\/li>\n<li><b>False<\/b>: Falsch, Nein, 0<\/li>\n<li><b>{x:Null}<\/b>: Kein Wert<\/li>\n<\/ul>\n<p>Bild 6 zeigt die Auswahl der verschiedenen Werte per IntelliSense.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_04\/pic_280_007.png\" alt=\"Werte f&uuml;r das Attribut IsChecked\" width=\"599,6265\" height=\"158,9174\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Werte f&uuml;r das Attribut IsChecked<\/span><\/b><\/p>\n<p>Der folgende XAML-Code definiert <b>CheckBox<\/b>-Elemente mit den drei verf&uuml;gbaren Werten f&uuml;r das Attribut <b>IsChecked<\/b>:<\/p>\n<pre>&lt;CheckBox x:Name=\"chkChecked\" IsChecked=\"True\" VerticalAlignment=\"Center\"&gt;&lt;\/CheckBox&gt;\r\n&lt;Label&gt;IsChecked = True&lt;\/Label&gt;\r\n...\r\n&lt;CheckBox x:Name=\"chkNotChecked\" IsChecked=\"False\" VerticalAlignment=\"Center\"&gt;&lt;\/CheckBox&gt;\r\n&lt;Label&gt;IsChecked = False&lt;\/Label&gt;\r\n...\r\n&lt;CheckBox x:Name=\"chkNull\" IsChecked=\"{x:Null}\" VerticalAlignment=\"Center\"&gt;&lt;\/CheckBox&gt;\r\n&lt;Label&gt;IsChecked = {x:Null}&lt;\/Label&gt;<\/pre>\n<p>Diese Elemente sehen nun wie in Bild 7 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_04\/pic_280_008.png\" alt=\"Verschiedene Zust&auml;nde des CheckBox-Elements\" width=\"424,6267\" height=\"179,7426\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Verschiedene Zust&auml;nde des CheckBox-Elements<\/span><\/b><\/p>\n<h2>Dreifachen Zustand aktivieren<\/h2>\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\/55000280\/\">\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\/55000280?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\/55000280\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"dbce743e9d\"\/>\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>&#8220;Ja oder Nein &#8211; das ist hier die Frage!&#8221; Oder doch vielleicht Wenn es um ein Steuerelement f&uuml;r Ja oder Nein, Wahr oder Falsch, 0 oder -1 geht, ist das Kontrollk&auml;stchen die erste Wahl. Oder, wie es in WPF hei&szlig;t: CheckBox. Mit dem CheckBox-Steuerelement lassen sich &uuml;blicherweise zwei Zust&auml;nde abbilden, die entweder durch einen Haken oder eben durch ein leeres K&auml;stchen dargestellt werden. Ganz nebenbei bemerkt, kann man Kontrollk&auml;stchen auch noch f&uuml;r einen dritten Zustand verwenden, n&auml;mlich Null oder Nothing &#8211; je nach Programmiersprache. Dieser Artikel zeigt, was Sie mit dem CheckBox-Steuerelement von WPF  anstellen 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":[662021,66042021,44000027,44000015],"tags":[],"yst_prominent_words":[],"class_list":["post-55000280","post","type-post","status-publish","format-standard","hentry","category-662021","category-66042021","category-Excel_programmieren","category-WPFSteuerelemente"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000280","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=55000280"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000280\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000280"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000280"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000280"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000280"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}