{"id":55000230,"date":"2020-08-01T00:00:00","date_gmt":"2020-11-26T10:42:56","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=230"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"XAMLEigenschaften_beim_Debuggen_testen","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/XAMLEigenschaften_beim_Debuggen_testen\/","title":{"rendered":"XAML-Eigenschaften beim Debuggen testen"},"content":{"rendered":"<p><b>Visual Studio 2019 und h&ouml;her<\/b><\/p>\n<p><b>XAML bietet sehr viele M&ouml;glichkeiten, das Design von Steuerelementen in einer Anwendung anzupassen. Viele der Eigenschaften sind von den Standardsteuerelementen vorgegeben, andere passen Sie selbst durch Definition des XAML-Codes an. Wenn dann beim Testen der Anwendung Elemente nicht wie erwartet aussehen, stellt sich die Frage, woran das liegt. Dann lautet die Aufgabe, herauszufinden, woher die jeweilige Einstellung stammt und diese so anzupassen, dass das Design wie gew&uuml;nscht erscheint. F&uuml;r solche Zwecke gibt es in Visual Studio eingebaute Tools, die wir uns in diesem Artikel ansehen. Mit Visual Studio 2019 gibt es viele Verbesserungen, die ein Update lohnenswert machen.<\/b><\/p>\n<p><b>Logical Tree vs. Visual Tree<\/b><\/p>\n<p>Es gibt zwei verschiedene Hierarchien bei der Darstellung von XAML-Benutzeroberfl&auml;chen. Die erste kennen Sie sehr gut &#8211; dabei handelt es sich um den Logical Tree. Der Logical Tree besteht aus den Elementen, die Sie im XAML-Editor definieren &#8211; also Elemente wie <b>Window<\/b>, <b>Grid<\/b>, <b>StackPanel<\/b>, <b>TextBox<\/b>, <b>Button <\/b>und so weiter.<\/p>\n<p>Der Logical Tree definiert dabei nicht nur, welche Elemente in der XAML-Definition enthalten sind, sondern auch deren hierarchische Anordnung.<\/p>\n<p>Die zweite Hierarchie ist der Visual Tree. Warum ben&ouml;tigen wir eine zweite Hierarchie Weil die Elemente des Logical Tree auf Vorlagen basieren, die nicht nur aus einem einzigen Element bestehen, sondern aus mehreren. Der Logical Tree ist also eine vereinfachte Form des Visual Tree. Wenn der Logical Tree gerendert wird, also wenn die Darstellung der Benutzeroberfl&auml;che daraus generiert wird, entstehen daraus meist sehr viel mehr Elemente. Ein <b>ListView<\/b>-Steuerelement etwa besteht aus R&auml;ndern, Bildlaufleisten, Spaltenk&ouml;pfen, Zeilen, Spalten und weiteren Elementen.<\/p>\n<p>Warum m&uuml;ssen wir das an dieser Stelle wissen Weil wir zur Laufzeit nicht auf die Eigenschaften der Elemente des Logical Trees zugreifen k&ouml;nnen, aber auf die Eigenschaften des Visual Trees. Wie das gelingt, zeigen wir in den folgenden Abschnitten.<\/p>\n<p><b>Debugging-Funktionen aktivieren<\/b><\/p>\n<p>Damit wir die nachfolgend vorgestellten Funktionen nutzen k&ouml;nnen, m&uuml;ssen wir diese zun&auml;chst in den Optionen von Visual Studio aktivieren. Dazu &ouml;ffnen Sie den Optionen-Dialog mit dem Men&uuml;befehl <b>Extras|Optionen<\/b>. Im Optionen-Dialog wechseln Sie dann zum Bereich <b>Debugging|Allgemein<\/b>. Hier finden Sie die Option <b>UI-Debugtools f&uuml;r XAML aktivieren <\/b>(siehe Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_04\/pic_230_002.png\" alt=\"Einstellungen f&uuml;r das Debuggen von XAML-Code\" width=\"649,559\" height=\"378,9093\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Einstellungen f&uuml;r das Debuggen von XAML-Code<\/span><\/b><\/p>\n<p>Die einzelnen Einstellungen haben die folgende Bedeutung:<\/p>\n<ul>\n<li><b>UI-Debugtools f&uuml;r XAML aktivieren<\/b>: Mit dieser Option legen Sie fest, ob die Debugtools &uuml;berhaupt aktiviert sein sollen. Die untergeordneten Optionen steuern dann, wie die Debug-Tools bereitgestellt werden.<\/li>\n<li><b>Voransicht f&uuml;r ausgew&auml;hlte Elemente in der Live-Baumansicht anzeigen<\/b>: Das aktuell ausgew&auml;hlte XAML-Element wird im Bereich <b>Visueller Livebaum<\/b> angezeigt.<\/li>\n<li><b>Laufzeittools in Anwendung anzeigen<\/b>: Blendet eine Men&uuml;leiste oben im Fenster der zu testenden Anwendung ein, &uuml;ber welche die Debugging-Funktionen schnell aufgerufen werden k&ouml;nnen (siehe Bild 2). Die Laufzeittools k&ouml;nnen Sie &uuml;brigens auch zur Laufzeit durch Aktivieren der Option einblenden.<\/li>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_04\/pic_230_001.png\" alt=\"Steuerelemente f&uuml;r das Debuggen von XAML-Eigenschaften\" width=\"700\" height=\"242,9464\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Steuerelemente f&uuml;r das Debuggen von XAML-Eigenschaften<\/span><\/b><\/p>\n<li><b>XAML Hot Reload aktivieren<\/b>: Aktiviert die Funktion XAML Hot Reload, die dazu dient, zur Laufzeit &Auml;nderungen am XAML-Code vorzunehmen und diese direkt in Echtzeit zu testen.<\/li>\n<li><b>Nur meine XAML aktivieren<\/b>: Der visuelle Livebaum zeigt ab Visual Studio 2019 (Version 16.4) nur benutzerdefinierte Elemente an, wenn diese Option aktiviert ist. Wenn Sie alle Elemente sehen wollen, deaktivieren Sie diese Option.<\/li>\n<li><b>Bei Auswahl eines Elements Auswahlmodus deaktivieren<\/b>: Wenn Sie bei aktivierter Option in der Men&uuml;leiste f&uuml;r die Debugging-Tools in der Anwendung auf die Schaltfl&auml;che <b>Element ausw&auml;hlen <\/b>klicken und dann &uuml;ber die Elemente der Anwendung fahren, wird das jeweils &uuml;berfahrene Element mit einem gestrichelten, roten Rahmen versehen. Klicken Sie es an, wird das jeweilige Element im visuellen Livebaum hervorgehoben. Danach wird die Schaltfl&auml;che Element ausw&auml;hlen wieder deaktiviert und Sie m&uuml;ssen diese f&uuml;r die erneute Auswahl eines Elements erneut anklicken. Ist die Option deaktiviert, k&ouml;nnen Sie nach dem Anklicken der Schaltfl&auml;che <b>Element ausw&auml;hlen <\/b>immer wieder neue Elemente im visuellen Livebaum anzeigen lassen. Die Schaltfl&auml;che <b>Element ausw&auml;hlen <\/b>bleibt dann aktiviert.<\/li>\n<li><b>Bei Dokumentspeicherung XML Hot Reload anwenden<\/b>: XML Hot Reload wird angewendet, wenn Sie das Dokument speichern.<\/li>\n<\/ul>\n<p><b>Visuellen Livebaum und Eigenschaften-Explorer aktivieren<\/b><\/p>\n<p>Wenn Sie die Symbole zum Aufrufen der Debugging-Funktionen im Anwendungsfenster nicht sehen wollen, k&ouml;nnen Sie die wichtigsten Funktionen auch &uuml;ber das Men&uuml; von Visual Studio aufrufen. Dort finden Sie die Eintr&auml;ge <b>Debuggen|Fenster|Visueller Livebaum <\/b>und <b>Debuggen|Fenster|Live-Eigenschaften-Explorer <\/b>(siehe Bild 3).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_04\/pic_230_003.png\" alt=\"Visuellen Livebaum und Live-Eigenschaften-Explorer per Men&uuml; aktivieren\" width=\"700\" height=\"350,4253\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Visuellen Livebaum und Live-Eigenschaften-Explorer per Men&uuml; aktivieren<\/span><\/b><\/p>\n<p><b>Den visuellen Livebaum nutzen<\/b><\/p>\n<p>Den visuellen Livebaum haben wir nun schon mehrfach erw&auml;hnt, aber wir haben ihn uns noch nicht angesehen. Den logischen Baum kennen wir, also schauen wir uns nun den visuellen Livebaum an. Diesen aktivieren Sie beispielsweise &uuml;ber den oben genannten Men&uuml;bfehl <b>Debuggen|Fenster|Visueller Livebaum<\/b> oder, wenn das Laufzeittools-Men&uuml; im Anwendungsfenster aktiviert ist, &uuml;ber die Schaltfl&auml;che <b>Zur visuellen Echtzeitstruktur wechseln <\/b>(linke Schaltfl&auml;che). Wir haben ein einfaches Fenster mit einer Schaltfl&auml;che erstellt, deren Code im logischen Baum vereinfacht wie folgt aussieht:<\/p>\n<pre>&lt;Window x:Class=\"MainWindow\" ... Title=\"MainWindow\" Height=\"450\" Width=\"800\"&gt;\r\n     &lt;Window.Resources&gt;\r\n         &lt;Style TargetType=\"Button\"&gt;\r\n             &lt;Setter Property=\"Margin\" Value=\"5\"&gt;&lt;\/Setter&gt;\r\n         &lt;\/Style&gt;\r\n     &lt;\/Window.Resources&gt;\r\n     &lt;Grid&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;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;Button x:Name=\"btnTest\"&gt;Beispielschaltfl&auml;che&lt;\/Button&gt;\r\n     &lt;\/Grid&gt;\r\n&lt;\/Window&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\/55000230\/\">\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\/55000230?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\/55000230\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"301847cd9d\"\/>\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>XAML bietet sehr viele M&ouml;glichkeiten, das Design von Steuerelementen in einer Anwendung anzupassen. Viele der Eigenschaften sind von den Standardsteuerelementen vorgegeben, andere passen Sie selbst durch Definition des XAML-Codes an. Wenn dann beim Testen der Anwendung Elemente nicht wie erwartet aussehen, stellt sich die Frage, woran das liegt. Dann lautet die Aufgabe, herauszufinden, woher die jeweilige Einstellung stammt und diese so anzupassen, dass das Design wie gew&uuml;nscht erscheint. F&uuml;r solche Zwecke gibt es in Visual Studio eingebaute Tools, die wir uns in diesem Artikel ansehen. Mit Visual Studio 2019 gibt es viele Verbesserungen, die ein Update lohnenswert machen.<\/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,66042020,44000004,44000003],"tags":[],"yst_prominent_words":[],"class_list":["post-55000230","post","type-post","status-publish","format-standard","hentry","category-662020","category-66042020","category-Loesungen","category-WPFGrundlagen"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000230","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=55000230"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000230\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000230"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000230"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000230"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000230"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}