{"id":55000165,"date":"2019-02-01T00:00:00","date_gmt":"2020-03-27T19:36:06","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=165"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Access_zu_WPF_Detailformulare_mit_Textfeldern","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Access_zu_WPF_Detailformulare_mit_Textfeldern\/","title":{"rendered":"Access zu WPF: Detailformulare mit Textfeldern"},"content":{"rendered":"<p><b>Wir haben uns bereits in einigen Artikel angesehen, wie Sie &Uuml;bersichtsformulare, Detailformulare und so weiter unter WPF anlegen. Was aber, wenn Sie keine Lust haben, die Formulare unter WPF alle neu zu programmieren, obwohl Sie das schon unter Access erledigt haben In diesem Artikel schauen wir uns an, wie die programmgesteuerten M&ouml;glichkeiten aussehen, um Formulare automatisch als WPF-Fenster oder -Seiten abzubilden. Es wird ein wenig Handarbeit &uuml;brig bleiben, aber einen gro&szlig;en Teil der Schritte k&ouml;nnen Sie sich damit deutlich erleichtern. <\/b><\/p>\n<h2>Voraussetzungen<\/h2>\n<p>Wir gehen an dieser Stelle davon aus, dass Sie bereits ein Entity Data Model auf Basis des Access-Datenmodells erstellt und eine entsprechende SQL Server-Datenbank auf Basis des Entity Data Modells erstellt haben. Wie das gelingt, zeigen die Artikel <b>Von Access zu Entity Framework: Datenmodell <\/b>und <b>Von Access zu Entity Framework: Daten<\/b> aus Ausgabe 5\/2018.<\/p>\n<p>Nun wollen wir versuchen, die Migration einfacher Formulare von Access aus in funktionsf&auml;hige WPF-Fenster zu erreichen.<\/p>\n<h2>Beispiel: Kundenformular<\/h2>\n<p>Unser Beispiel finden Sie in der Beispieldatenbank <b>Bestellverwaltung.accdb <\/b>im Download zu diesem Artikel. Wir wollen das Formular <b>frmKundendetails <\/b>als WPF-Fenster nachbauen. Das Formular sehen Sie in Bild 1 in der Entwurfsansicht. Es verwendet die Tabelle <b>tblKunden <\/b>als Datensatzquelle. Die Textfelder sind jeweils an entsprechende Felder der Datensatzquelle des Formulars gebunden. Das Kombinationsfeld <b>cboAnredeID <\/b>verwendet die Abfrage <b>SELECT [tblAnreden].[AnredeID], [tblAnreden].[Anrede] FROM tblAnreden; <\/b>als Datensatzherkunft und ist an das Feld <b>AnredeID <\/b>gebunden. F&uuml;r das erste Feld der Datensatzherkunft haben wir die Spaltenbreite auf <b>0cm <\/b>eingestellt, damit dieses nicht angezeigt wird. Es erscheint also nur das zweite Feld der Datensatzherkunft.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_01\/pic_165_001.png\" alt=\"Das Formular frmKunden in der Formularansicht\" width=\"349,7625\" height=\"363,9196\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Das Formular frmKunden in der Formularansicht<\/span><\/b><\/p>\n<h2>Projekt erstellen<\/h2>\n<p>Wir erstellen ein neues Projekt namens <b>AccessZuWPFFormulare <\/b>und f&uuml;hren die im Artikel <b>Von Access zu EF: Step by step <\/b>aus Ausgabe 5\/2018 beschriebenen Schritte aus, um die Tabellenentw&uuml;rfe und Daten der Tabellen unserer Beispieldatenbank als Entity Data Model hinzuzuf&uuml;gen. Das gelingt innerhalb von ungef&auml;hr f&uuml;nf Minuten, wenn Sie die Beispieldatenbank dazu verwenden. F&uuml;r andere Datenbanken haben wir dies noch nicht getestet. Wenn Sie versuchen, andere Datenbanken zu migrieren und auf Fehler sto&szlig;en, teilen Sie uns das gern mit. Wir ben&ouml;tigen dann allerdings eine Kopie des Datenmodells im Access-Format, damit wir damit experimentieren und unsere Tools verbessern k&ouml;nnen (per E-Mail an <b>andre@minhorst.com<\/b>).<\/p>\n<p>Zum Testen der migrierten Datenbank verwenden Sie eine neue Schaltfl&auml;che auf der Seite <b>MainWindow.xaml<\/b>, welche die folgende Methode aufruft:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>btnTestDatabase_Click(sender<span style=\"color:blue;\"> As Object<\/span>, e<span style=\"color:blue;\"> As <\/span>RoutedEventArgs)\r\n     <span style=\"color:blue;\">Dim <\/span>dbContext<span style=\"color:blue;\"> As <\/span>BestellverwaltungContext\r\n     <span style=\"color:blue;\">Dim <\/span>Kunden<span style=\"color:blue;\"> As <\/span>ObservableCollection(Of Kunde)\r\n     dbContext = <span style=\"color:blue;\">New<\/span> BestellverwaltungContext\r\n     Kunden = <span style=\"color:blue;\">New<\/span> ObservableCollection(Of Kunde)(dbContext.Kunden)\r\n     MessageBox.Show(\"Anzahl Kunden: \" + Kunden.Count().ToString())\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Danach sollte beim Starten des Projekts und Anklicken der Schaltfl&auml;che ein Meldungsfenster mit der Anzahl der Datens&auml;tze der Tabelle <b>Kunden <\/b>erscheinen.<\/p>\n<h2>Vom Formular zu WPF<\/h2>\n<p>Nun schauen wir uns an, was f&uuml;r eine Aufgabe &uuml;berhaupt vor uns liegt. Wir wollen das Formular <b>frmKundendetails <\/b>aus der Access-Datenbank als Fenster der WPF-Anwendung abbilden. Was ben&ouml;tigen wir dazu Zun&auml;chst einmal ist soll das Fenster die Gr&ouml;&szlig;e erhalten, die auch unser Access-Formular aufweist. Dann wollen wir die Steuer-elemente auslesen und im WPF-Fenster anlegen. Diese sollen, genau wie das Fenster, mit den Eigenschaften zum Binden des Fensters und der Steuer-elemente an die Daten versehen werden. Schlie&szlig;lich fehlen noch die Ereignisprozeduren, die durch die Steuer-elemente und das Formular selbst ausgel&ouml;st werden.<\/p>\n<p>Wir wollen zun&auml;chst von Access aus starten und hier Code schreiben, mit dem wir die notwendigen Informationen aus dem Formularentwurf auslesen und daraus automatisiert die XAML-Definition f&uuml;r das WPF-Fenster sowie den Inhalt der Code behind-Daten f&uuml;r das Fenster erstellen. Diesen kopieren wir dann zun&auml;chst von Hand in ein neues Fenster-Element in unserem Projekt.<\/p>\n<h2>Fenstergr&ouml;&szlig;e<\/h2>\n<p>Wir beginnen einmal mit einer vermeintlich einfachen Aufgabe: dem Ermitteln der Fenstergr&ouml;&szlig;e und dem Erstellen des Code-Elements, welches diese beiden Eigenschaften enth&auml;lt. Wenn wir die Eigenschaften im Eigenschaftenblatt von Access ansehen, erhalten wir Angaben in der Einheit Zentimeter, also beispielsweise <b>9,198cm <\/b>f&uuml;r die Formularbreite und <b>9,198cm <\/b>f&uuml;r die H&ouml;he des Detailbereichs. Geben wir die Eigenschaften <b>Width <\/b>des Form-Elements und <b>Me.Height <\/b>des Detailbereichs (<b>Me.Section(0).Height<\/b>) aus, erhalten wir Werte wie <b>4535 <\/b>und <b>5215<\/b>. Wenn wir die Eigenschaften in der XAML-Definition betrachten, finden wir Werte wie <b>450 <\/b>f&uuml;r die Eigenschaft <b>Height <\/b>und <b>800 <\/b>f&uuml;r die Eigenschaft <b>Width<\/b>. Wir m&uuml;ssen die Zahlen also noch umrechnen. Die Gr&ouml;&szlig;e und Breite unter Visual Studio wird in Pixel angegeben. Unter Access werden diese Werte in Twips angegeben. Zur Umrechnung von Twips in Pixel gibt es ausreichend Funktionen, von denen wir zwei im Modul <b>mdlUmrechnungen <\/b>der Beispieldatenbank eingef&uuml;gt haben. Sie hei&szlig;en <b>TwipsToPixelHeight <\/b>und <b>TwipsToPixelWidth<\/b>. Wir ben&ouml;tigen zwei Funktionen, weil die Faktoren f&uuml;r die Umrechnungen unterschiedlich sein k&ouml;nnen.<\/p>\n<h2>Basisprozedur<\/h2>\n<p>Damit legen wir nun die Basis f&uuml;r das Erstellen des WPF-Codes. Die ben&ouml;tigte VBA-Prozedur sieht wie folgt aus, wobei wir zun&auml;chst einige Variablen deklarieren:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>FormularNachWPF()\r\n     <span style=\"color:blue;\">Dim <\/span>frm<span style=\"color:blue;\"> As <\/span>Form\r\n     <span style=\"color:blue;\">Dim <\/span>strForm<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strXAML<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>lngHeight<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>lngWidth<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strTitle<span style=\"color:blue;\"> As String<\/span><\/pre>\n<p>Dann &ouml;ffnen wir das Formular in der Entwurfsansicht und weisen dieses der Variablen <b>frm <\/b>zu:<\/p>\n<pre>     strForm = \"frmKundendetails\"\r\n     DoCmd.OpenForm strForm, acDesign\r\n     <span style=\"color:blue;\">Set<\/span> frm = Forms(strForm)<\/pre>\n<p>Dann ermitteln wir mit den Umrechnungsfunktionen die H&ouml;he und Breite:<\/p>\n<pre>     lngHeight = TwipsToPixelsHeight(frm.Section(0).Height)\r\n     lngWidth = TwipsToPixelswidth(frm.Width)<\/pre>\n<p>Au&szlig;erdem pr&uuml;fen wir, ob ein Titel f&uuml;r das Formular angegeben wurde und schreiben diesen oder alternativ den Formularnamen in die Variable <b>strTitle<\/b>:<\/p>\n<pre>     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> <span style=\"color:blue;\">Len<\/span>(frm.Caption) = 0<span style=\"color:blue;\"> Then<\/span>\r\n         strTitle = frm.Caption\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         strTitle = frm.Name\r\n     <span style=\"color:blue;\">End If<\/span><\/pre>\n<p>Schlie&szlig;lich bauen wir den grundlegenden XAML-Code f&uuml;r das Fenster zusammen, wobei wir den standardm&auml;&szlig;ig verwendeten Code nutzen und unsere ermittelten Werte f&uuml;r Fenstername, Titel, H&ouml;he und Breite an den entsprechenden Stellen einf&uuml;gen:<\/p>\n<pre>     strXAML = strXAML & \"&lt;Window x:Class=\"\"\" & frm.Name & \"\"\"\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strXAML = strXAML & \"        xmlns=\"\"http:\/\/schemas.microsoft.com\/winfx\/2006\/xaml\/presentation\"\"\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strXAML = strXAML & \"        xmlns:x=\"\"http:\/\/schemas.microsoft.com\/winfx\/2006\/xaml\"\"\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strXAML = strXAML & \"        xmlns:d=\"\"http:\/\/schemas.microsoft.com\/expression\/blend\/2008\"\"\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strXAML = strXAML & \"        xmlns:mc=\"\"http:\/\/schemas.openxmlformats.org\/markup-compatibility\/2006\"\"\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strXAML = strXAML & \"        xmlns:local=\"\"clr-namespace:AccessZuWPFFormulare\"\"\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strXAML = strXAML & \"        mc:Ignorable=\"\"d\"\"\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strXAML = strXAML & \"        Title=\"\"\" & strTitle & \"\"\" Height=\"\"\" & lngHeight & \"\"\" Width=\"\"\" & lngWidth & \"\"\"&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strXAML = strXAML & \"    &lt;Grid&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span><\/pre>\n<p>Dazwischen platzieren wir den Aufruf der Prozedur <b>Steuer-elementeHinzufuegen<\/b>, die wir im Anschluss erstellen &#8211; f&uuml;r den ersten Testlauf bleibt diese auskommentiert:<\/p>\n<pre>     ''SteuerelementeHinzufuegen frm, strXAML\r\n     strXAML = strXAML & \"    &lt;\/Grid&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strXAML = strXAML & \"&lt;\/Window&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span><\/pre>\n<p>Schlie&szlig;lich nutzen wir die Prozedur <b>InZwischenablage<\/b>, um den Inhalt der String-Variablen <b>strXAML <\/b>in die Zwischenablage zu kopieren (siehe <b>mdlZwischenablage<\/b>) und schlie&szlig;en das Formular wieder:<\/p>\n<pre>     Inzwischenablage strXAML\r\n     DoCmd.Close acForm, strForm\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Wenn Sie diese Prozedur ausf&uuml;hren und den Inhalt der Zwischenablage als XAML-Code eines neuen Fensters einsetzen, erhalten Sie die Ansicht aus Bild 2.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_01\/pic_165_002.png\" alt=\"H&ouml;he, Breite, Titel und Name wurden vom Access-Formular &uuml;bernommen\" width=\"549,6265\" height=\"536,0655\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: H&ouml;he, Breite, Titel und Name wurden vom Access-Formular &uuml;bernommen<\/span><\/b><\/p>\n<p>Ob dieses Fenster unseren Anspr&uuml;chen gen&uuml;gt, m&uuml;ssen wir allerdings noch herausfinden &#8211; dazu ben&ouml;tigen wir im Fenster <b>MainWindows.xaml <\/b>noch eine Schaltfl&auml;che, mit der wir das neu erstellte Fenster &ouml;ffnen k&ouml;nnen. Diese soll den folgenden Code ausf&uuml;hren:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>btnKundendetails_Click(sender<span style=\"color:blue;\"> As Object<\/span>, e<span style=\"color:blue;\"> As <\/span>RoutedEventArgs)\r\n     <span style=\"color:blue;\">Dim <\/span>Kundendetails<span style=\"color:blue;\"> As <\/span>frmKundendetails\r\n     Kundendetails = <span style=\"color:blue;\">New<\/span> frmKundendetails()\r\n     Kundendetails.Show()\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Steuer-elemente migrieren<\/h2>\n<p>Als n&auml;chstes wollen wir uns um die Steuerelemente k&uuml;mmern. Den folgenden Aufruf haben wir ja schon im Code platziert &#8211; Sie m&uuml;ssen nur noch die Markierung als Kommentar entfernen:<\/p>\n<pre>    SteuerelementeHinzufuegen frm, strXAML<\/pre>\n<p>Die Prozedur selbst erwartet die beiden &uuml;bergebenen Parameter, n&auml;mlich einen Verweis auf das Formular (<b>frm<\/b>) und die Variable zum Zusammenstellen des XAML-Codes (<b>strXAML<\/b>). Damit starten wir in die erste Rohfassung der Prozedur:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>SteuerelementeHinzufuegen(frm<span style=\"color:blue;\"> As <\/span>Form, strXAML<span style=\"color:blue;\"> As String<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>ctl<span style=\"color:blue;\"> As <\/span>Control\r\n     <span style=\"color:blue;\">Dim <\/span>lngWidth<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>lngHeight<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>lngTop<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>lngLeft<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strCaption<span style=\"color:blue;\"> As String<\/span><\/pre>\n<p>In dieser durchlaufen wir alle Steuer-elemente des Formulars &uuml;ber die <b>Controls<\/b>-Auflistung und referenzieren das aktuelle Steuer-element jeweils mit der Variablen <b>ctl<\/b>. Hier tragen wir zun&auml;chst die Gr&ouml;&szlig;e und die Position in die entsprechenden Variablen ein:<\/p>\n<pre>     For Each ctl In frm.Controls\r\n         lngWidth = TwipsToPixelsWidth(ctl.Width)\r\n         lngHeight = TwipsToPixelsHeight(ctl.Height)\r\n         lngTop = TwipsToPixelsHeight(ctl.Top)\r\n         lng<span style=\"color:blue;\">Left<\/span> = TwipsToPixelsWidth(ctl.Left)<\/pre>\n<p>Dann pr&uuml;fen wir in einer <b>Select Case<\/b>-Schleife, welchen Typ das aktuell mit <b>ctl <\/b>referenzierte Steuer-element hat. In diesem Fall haben wir zun&auml;chst die Typen <b>acTextBox <\/b>und <b>acLabel <\/b>untersucht und f&uuml;gen f&uuml;r jedes Bezeichnungsfeld und jedes Textfeld eine Zeile zu <b>strXAML <\/b>hinzu, welche das Aussehen des jeweiligen Steuerelements beschreibt:<\/p>\n<pre>         Select Case ctl.ControlType\r\n             <span style=\"color:blue;\">Case <\/span>acTextBox\r\n                 strXAML = strXAML & \"&lt;TextBox x:Name=\"\"\" & ctl.Name & \"\"\" FontFamily=\"\"Calibri\"\" FontSize=\"\"\" _\r\n                     & ctl.FontSize & \"pt\"\" HorizontalAlignment=\"\"Left\"\" Height=\"\"\" & lngHeight & \"\"\" Margin=\"\"\" _\r\n                     & lng<span style=\"color:blue;\">Left<\/span> & \",\" & lngTop & \",0,0\"\" TextWrapping=\"\"Wrap\"\" Text=\"\"TextBox\"\" \" _\r\n                     & \"VerticalAlignment=\"\"Top\"\" Width=\"\"\" & lngWidth & \"\"\"\/&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n             <span style=\"color:blue;\">Case <\/span>acLabel\r\n                strCaption = ctl.Caption\r\n                 strXAML = strXAML & \"&lt;Label x:Name=\"\"\" & ctl.Name & \"\"\" Content=\"\"\" & strCaption _\r\n                     & \"\"\" FontFamily=\"\"Calibri\"\" FontSize=\"\"11pt\"\" Padding=\"\"0\"\" \" _\r\n                     & \"VerticalContentAlignment=\"\"Center\"\" HorizontalAlignment=\"\"Left\"\" Height=\"\"\" & lngHeight _\r\n                     & \"\"\" Margin=\"\"\" & lng<span style=\"color:blue;\">Left<\/span> & \",\" & lngTop & \",0,0\"\" VerticalAlignment=\"\"Top\"\" Width=\"\"\" & lngWidth _\r\n                     & \"\"\"\/&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n             <span style=\"color:blue;\">Case <\/span>acCommandButton\r\n             <span style=\"color:blue;\">Case <\/span>acComboBox\r\n             <span style=\"color:blue;\">Case Else<\/span>\r\n                 <span style=\"color:blue;\">Debug.Print<\/span> \"Steuerelementtyp nicht behandelt: \" & ctl.Name, ctl.ControlType\r\n         <span style=\"color:blue;\">End Select<\/span>\r\n     <span style=\"color:blue;\">Next<\/span> ctl\r\n<span style=\"color:blue;\">End Function<\/span><\/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\/55000165\/\">\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\/55000165?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\/55000165\/\"\/>\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>Wir haben uns bereits in einigen Artikel angesehen, wie Sie &Uuml;bersichtsformulare, Detailformulare und so weiter unter WPF anlegen. Was aber, wenn Sie keine Lust haben, die Formulare unter WPF alle neu zu programmieren, obwohl Sie das schon unter Access erledigt haben In diesem Artikel schauen wir uns an, wie die programmgesteuerten M&ouml;glichkeiten aussehen, um Formulare automatisch als WPF-Fenster oder -Seiten abzubilden. Es wird ein wenig Handarbeit &uuml;brig bleiben, aber einen gro&szlig;en Teil der Schritte k&ouml;nnen Sie sich damit deutlich erleichtern. <\/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":[66012019,662019,44000007],"tags":[],"yst_prominent_words":[],"class_list":["post-55000165","post","type-post","status-publish","format-standard","hentry","category-66012019","category-662019","category-Von_Access_zu_WPF"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000165","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=55000165"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000165\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000165"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000165"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000165"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000165"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}