{"id":55000093,"date":"2017-08-01T00:00:00","date_gmt":"2020-03-27T19:27:20","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=93"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Type_Converter_in_WPFC","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Type_Converter_in_WPFC\/","title":{"rendered":"Type Converter in WPF\/C#"},"content":{"rendered":"<p><b>Manche Eigenschaften eines .xaml-Dokuments sind sehr flexibel. F&uuml;r die Eigenschaft Margin beispielsweise k&ouml;nnen Sie ganz verschiedenen Werte angeben &#8211; zum Beispiel einfach den Wert 5, um Abst&auml;nde in alle vier Richtungen zu erhalten oder auch die Zeichenkette 5,0,5,0, um nur einen linken und einen rechten Abstand abzubilden. Auch andere Eigenschaften nehmen durchaus unterschiedliche Werte entgegen, zum Beispiel solche zur Angabe von Farben. Wenn man genauer hinsieht, stellt man schnell fest, dass man da Attributen, die v&ouml;llig anderen Typs sind, ein String-Literal zuweist. Warum das hier gelingt, beschreibt der vorliegende Artikel.<\/b><\/p>\n<h2>Type Converter am Beispiel von Abst&auml;nden<\/h2>\n<p>Ein Beispiel f&uuml;r die Angabe eines Strings f&uuml;r ein Attribut mit einem anderen Datentyp als String ist das Attribut <b>Margin<\/b>.<\/p>\n<p>Wenn wir einmal einen Button nur mit einem Rand ausstatten, der laut unserer Angabe den Abstand <b>5 <\/b>von der linken und rechten und den Abstand <b>10 <\/b>von der oberen und unteren Kante des &uuml;bergeordneten Elements aufweist, dann erhalten wir einen Button wie in Bild 1. Der Code sieht indes so aus:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_04\/pic_93_001.png\" alt=\"Ein Button-Element mit verschiedenen Margin-Werten\" width=\"424,7115\" height=\"325,4447\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Ein Button-Element mit verschiedenen Margin-Werten<\/span><\/b><\/p>\n<pre>&lt;Button Margin=\"5,10,5,10\"&gt;<\/pre>\n<p>Wenn Sie im <b>.xaml<\/b>-Code einmal mit der rechten Maustaste auf das Attribut <b>Margin <\/b>klicken und dann den Eintrag <b>Gehe zu Definition <\/b>aus dem Kontextmen&uuml; ausw&auml;hlen, erscheint der Dialog aus Bild 2. Hier wird schnell deutlich, dass Margin keinesfalls den Datentyp <b>String <\/b>aufweist, sondern vielmehr den Datentyp <b>System.Windows.Thickness<\/b>. Wir m&uuml;ssten dieser Eigenschaft also normalerweise eine Struktur des Typs <b>Thickness <\/b>&uuml;bergeben! Diese Struktur weist wiederum die vier Eigenschaften <b>Bottom<\/b>, <b>Left<\/b>, <b>Right <\/b>und <b>Top <\/b>auf.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_04\/pic_93_002.png\" alt=\"Definition der Eigenschaft Margin\" width=\"649,559\" height=\"399,7285\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Definition der Eigenschaft Margin<\/span><\/b><\/p>\n<h2>Margin unter C#<\/h2>\n<p>Um zu verdeutlichen, dass wir hier grunds&auml;tzlich einen nicht passenden Wert &uuml;bergeben, wenn wir einen Zahlenwert oder auch einen String wie <b>5,10,5,10 <\/b>angeben, schauen wir uns das Anlegen eines Buttons mit dieser Eigenschaft unter C# an.<\/p>\n<p>Dazu erstellen wir mit der <b>new<\/b>-Anweisung ein neues Objekt des Typs <b>Button <\/b>und referenzieren dieses mit der Variablen <b>btn<\/b>. Danach weisen wir diesem genau wie in im <b>.xaml<\/b>-Code den Wert <b>&#8220;5, 10, 5, 10&#8221; <\/b>f&uuml;r die Eigenschaft <b>Margin <\/b>zu. Der gemeldete Fehler zeigt, dass <b>String <\/b>nicht in <b>Thickness <\/b>konvertiert werden kann (siehe Bild 3). <\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_04\/pic_93_003.png\" alt=\"Unter C# kann der Eigenschaft Margin kein String &uuml;bergeben werden.\" width=\"549,6265\" height=\"303,6033\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Unter C# kann der Eigenschaft Margin kein String &uuml;bergeben werden.<\/span><\/b><\/p>\n<p>Was aber ist nun unter C# anders als im <b>.xaml<\/b>-Code Der Unterschied ist, dass im <b>.xaml<\/b>-Code automatisch ein sogenannter Type Converter agiert und den angegebenen String in die gew&uuml;nschten Werte umwandelt und zuweist.<\/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\/55000093\/\">\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\/55000093?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\/55000093\/\"\/>\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>Manche Eigenschaften eines .xaml-Dokuments sind sehr flexibel. F&uuml;r die Eigenschaft Margin beispielsweise k&ouml;nnen Sie ganz verschiedenen Werte angeben &#8211; zum Beispiel einfach den Wert 5, um Abst&auml;nde in alle vier Richtungen zu erhalten oder auch die Zeichenkette 5,0,5,0, um nur einen linken und einen rechten Abstand abzubilden. Auch andere Eigenschaften nehmen durchaus unterschiedliche Werte entgegen, zum Beispiel solche zur Angabe von Farben. Wenn man genauer hinsieht, stellt man schnell fest, dass man da Attributen, die v&ouml;llig anderen Typs sind, ein String-Literal zuweist. Warum das hier gelingt, beschreibt 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":[662017,66042017,44000001,44000026,44000023,44000030,44000003],"tags":[],"yst_prominent_words":[],"class_list":["post-55000093","post","type-post","status-publish","format-standard","hentry","category-662017","category-66042017","category-CGrundlagen","category-Outlook_programmieren","category-PowerApps","category-PowerPoint_programmieren","category-WPFGrundlagen"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000093","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=55000093"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000093\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000093"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000093"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000093"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000093"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}