Aus Windows Form über Klasse Daten an TextBlock in WPForm übergeben.

  • WPF

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von Nofear23m.

    Aus Windows Form über Klasse Daten an TextBlock in WPForm übergeben.

    Hallo,

    für ein neues Projekt beschäftige ich mich erstmals mit WPF Formularen und bin bisher an der Datenbindung gescheitert. Ich habe es mit einigen Beispielen versucht, die ich aber nicht erfolgreich im eigenen Projekt umsetzen konnte. Ein vielversprechendes Beispiel habe ich zuletzt hier -> TextBlock an Property einer Klasse binden gefunden. Da gibt es aber ein Problem mit der Erweiterung MVVM Light, die ich zwar installiert habe. Die Einbindung in das Projekt ist mir aber nicht gelungen, weshalb ​Imports GalaSoft.MvvmLight.CommandWpf​ nicht möglich ist. Der nachfolgende Typ ​RelayCommand(Sub() ... ist dadurch wohl nicht definiert und wird nicht ausgeführt. Wie kann ich heruntergeladene Erweiterungen in das Projekt einbinden. Vielleicht funktioniert es dann ja damit. :/

    Mein Ziel ist für die Visualisierung einer Spielstandanzeige, mit einer WinForm per serieller Schnittstelle ununterbrochen Daten (Spielzeit als 'mm' und 'ss', Tor Heim, Tor Gast, Auszeit etc.) zu empfangen, die dann in passende Strings zerlegt in verschiedenen TextBoxen visualisiert werden. In Strings konnte ich die empfangenen Daten bereits für die Tests zerlegen. Auch in eine Klasse konnte ich die Daten schon übergeben.
    Jetzt fehlt nur noch der entscheidende Punkt der Datenbindung und Aktualisierung der TextBoxen (oder Label?) bei geänderten Inhalten. Insgesamt geht es um 8 Textboxen von welchen 2 (Mannschaftsnamen) ihre Daten aus manueller Texteingabe im WinForm erhalten.
    Kann mir jemand ein ganz simples Beispiel dafür geben? Ich konnte mich bislang immer ganz gut in den Quellcode einlesen. Der Aufbau der XAML-Dateien ist auch recht gut zu verstehen. Der Rest will sich mir leider noch nicht so richtig erschließen. Ich bin für jeden Lösungsansatz dankbar.
    Mit der Windows Form war es recht einfach Daten an ein anderes Formular zu übergeben, z.B. ​Form2.text1.text = ... oder ​Form2.label1.caption = .... WPF bietet viele neue Möglichkeiten, scheint in der Folge aber auch extrem komplex zu sein. ;(

    TiA Maik
    eine winforms-wpf-Hybrid-Anwendung ist ein seltener und umständlicher Spezialfall, mit einigen Nachteilen bezüglich Resourcen-Verbrauch.

    imo absolut nicht als Einsteiger-Projekt für einen wpf-Anfänger geeignet.

    täte dir sehr empfehlen, deine winforms-Anwendung "rein" zu erhalten.

    Um in wpf einzusteigen such dir ein wpf-projekt, was dafür auch geeignet ist - wie gesagt: son Hybride ist ziemlich ungeeignet.

    ErfinderDesRades schrieb:

    täte dir sehr empfehlen, deine winforms-Anwendung "rein" zu erhalten.

    Okay, ich habe das ganze erst mal klassisch als WinForm-Anwendung umgesetzt...

    VB.NET-Quellcode

    1. Private Sub Auswertung(ByVal received As String)
    2. '...
    3. MM = Trim(Mid(received, 2, 2))
    4. SS = Trim(Mid(received, 5, 2))
    5. TorHeim = Trim(Mid(received, 7, 3))
    6. TorGast = Trim(Mid(received, 10, 3))
    7. '...
    8. Windows_Form.Label1Minuten.Text = MM
    9. Windows_Form.Label2Sekunden.Text = SS
    10. Windows_Form.Label1TorHeim.Text = TorHeim
    11. Windows_Form.Label2TorGast.Text = TorGast
    12. '...
    13. End Sub


    Gerade für optisch ansprechende Visualisierung sind Label nicht so gut geeignet. U.a . ist die eingestellte Transparenz nur für den Hintergrund relevant. Leicht überlappende Label schneiden aber schnell Inhalte anderer Label ab. Mit den Layouts in den XAML-Dateien ist man da deutlich flexibler und kann ohne komplizierten Code z.B. direkt Farbverläufe etc. einstellen.
    Bis ich so weit in WPF eingestiegen bin, werde ich erst mal damit vorlieb nehmen. ;(
    Aufgegeben habe ich das Thema aber noch nicht. Es wird aber wohl seinen Grund habe, dass sich in WPF-Projekten WinForms hinzufügen lassen, umgekehrt aber nicht. Unmöglich scheint so ein Hybrid aber nicht. Mit etwa 60MB war der Ressourcenverbrauch auch noch im Rahmen. Jetzt sind es etwa 28MB.
    Hallo

    prinzip schrieb:

    Bis ich so weit in WPF eingestiegen bin, werde ich erst mal damit vorlieb nehmen.
    Aufgegeben habe ich das Thema aber noch nicht.

    Dann kannst du ja "nebenbei" immer wieder in meine Tutorialreihe reinsehen. (Siehe meine Signatur) Früher oder später kommt man drauf. So schlimm ist die WPF gar nicht. Anders, ja. Aber ist nicht so wild.
    Und wenn du denkst du bist soweit kannst du ja eine reine WPF Anwendung daraus machen. Und für probleme in dieser stehe ich dann natürlich gerne zur Verfügung.

    Schöne Grüße
    sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    Nofear23m schrieb:

    Dann kannst du ja "nebenbei" immer wieder in meine Tutorialreihe reinsehen.

    Das verfolge ich bereits mit großem Interesse. Danke an dieser Stelle! :thumbup:

    Nofear23m schrieb:

    Und wenn du denkst du bist soweit kannst du ja eine reine WPF Anwendung daraus machen.

    Wenn ich es richtig gesehen/gelesen habe, steht in einer reinen WPF Anwendung keine serielle Schnittstelle zur Verfügung. Das war der Hauptgrund zusätzlich ein WinForm einzusetzen.
    Danke, mit ​Option Strict On bin ich inzwischen schon konsequent unterwegs. Ansonsten habe ich wohl immer noch zu viel Altlast im Kopf und auch bei Lösungsansätzen im Netz findet man trotz Verwendung von 'vb.net' in der Suche häufig Relikte aus VB6. Ich werde versuchen, noch mehr darauf zu achten.
    Hallo

    Habe mit Serieller Schnittstelle noch nicht gearbeitet aber ich sehe keinen Grund warum das unter WPF nicht funktionieren soll.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    prinzip schrieb:

    Danke, mit Option Strict On bin ich inzwischen schon konsequent unterwegs.
    Dassis nur die halbe Miete. Die annere Hälfte ist, den Deppen-Namespace-GeneralImport abzuschalten.
    Ich hab dir das Tut doch verlinkt, also fände ich gut, wennde das auch lesen tätest.
    Da wird ja lang und breit auch über den Deppen-Namespace schwadroniert, und den zu deaktivieren ist genau der entscheidende Schritt, dass du dein vb6-Gerümpel aussm Kopf kriegst, und .Net da reinlässt.

    Und auch mit Strict On - da muss man nicht groß anstrengend konsequent sein. Einfach die Grund-Einstellungen einmal richtig setzen, und dann ist automatisch alles Strict On.

    wie gesagt: Tut - Lesen - Tun

    ErfinderDesRades schrieb:

    Ich hab dir das Tut doch verlinkt, also fände ich gut, wennde das auch lesen tätest.

    Nur weil ich nicht direkt darauf eingegangen bin bedeutet es nicht, dass ich es nicht gelesen habe. Mangels Entwicklungsumgebung zum probieren habe ich die Thematik erst mal beiseite gelegt.

    Inzwischen konnte ich es aber in der Praxis probieren und habe hierfür den Namespace Generalimport erstmals abgestellt. Da dieses Projekt noch sehr klein ist, waren nur wenige Korrekturen notwendig.
    Bei etwas umfangreicheren vorhandenen Projekten muss ich mir auch noch mal die Zeit dafür nehmen. Es ist auf jeden Fall sehr hilfreich beim Umstieg.

    Mit 'konsequent' bei 'Strict On' meinte ich übrigens das setzten der Option in der Software. Nach zwei Neuinstallationen habe ich es erst kürzlich wieder praktiziert. :huh:

    Nofear23m schrieb:

    meine Tutorialreihe

    Dank deiner Tutorialreihe habe ich nun eine Lösung gefunden.... :thumbup:
    Die Beispiele für das DataBinding habe ich dafür auf "BindToCodebehind" reduziert, öffne direkt die WinForm und blende das WPF MainWindows aus. Die WinForm öffnet dann ein zweites WPForm und kann dieses nun mit Daten versorgen. Hier im Beispiel nutze ich zunächst das TextChanged-Ereignis der Textboxen in der WinForm. In der Praxis kommen die Daten dann fortlaufend per serieller Schnittstelle.

    WPF MainWindows
    Spoiler anzeigen

    VB.NET-Quellcode

    1. ​Class MainWindow
    2. Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
    3. Dim dlg As New Form1
    4. dlg.Show()
    5. Me.Hide()
    6. End Sub
    7. End Class


    WinForm Form1
    Spoiler anzeigen

    VB.NET-Quellcode

    1. ​Imports System.Windows.Forms
    2. Public Class Form1
    3. Dim dlg As New BindToCodebehind
    4. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    5. dlg.Left = Me.Left
    6. dlg.Top = Me.Top + Me.Height
    7. dlg.Show()
    8. End Sub
    9. Private Sub Form1_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
    10. End
    11. End Sub
    12. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    13. If Button1.Text = "Start" Then
    14. dlg.Show()
    15. dlg.Left = Me.Left
    16. dlg.Top = Me.Top + Me.Height
    17. Button1.Text = "Stopp"
    18. Else
    19. dlg.Hide()
    20. Button1.Text = "Start"
    21. End If
    22. End Sub
    23. Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    24. dlg.TorHeim(TextBox1.Text)
    25. End Sub
    26. Private Sub TextBox2_TextChanged(sender As Object, e As EventArgs) Handles TextBox2.TextChanged
    27. dlg.TorGast(TextBox2.Text)
    28. End Sub
    29. Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
    30. If CheckBox1.Checked Then
    31. dlg.TimeOut("o")
    32. Else
    33. dlg.TimeOut("")
    34. End If
    35. End Sub
    36. Private Sub TextBox3_TextChanged(sender As Object, e As EventArgs) Handles TextBox3.TextChanged
    37. dlg.Heim(TextBox3.Text)
    38. End Sub
    39. Private Sub TextBox4_TextChanged(sender As Object, e As EventArgs) Handles TextBox4.TextChanged
    40. dlg.Gast(TextBox4.Text)
    41. End Sub
    42. Private Sub TextBox5_TextChanged(sender As Object, e As EventArgs) Handles TextBox5.TextChanged
    43. dlg.MM(TextBox5.Text)
    44. End Sub
    45. Private Sub TextBox6_TextChanged(sender As Object, e As EventArgs) Handles TextBox6.TextChanged
    46. dlg.SS(TextBox6.Text)
    47. End Sub
    48. End Class


    ShowGame WPF Form zur Visualisierung
    Spoiler anzeigen

    VB.NET-Quellcode

    1. ​Imports System.ComponentModel
    2. Imports System.Globalization
    3. Imports System.Runtime.CompilerServices
    4. Public Class BindToCodebehind
    5. Implements INotifyPropertyChanged
    6. Private Sub BindToClassFromCode_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
    7. Me.DataContext = Me
    8. TextHeim = "Heim"
    9. TextGast = "Gast"
    10. TextTorHeim = "0"
    11. TextTorGast = "0"
    12. TextMM = "0"
    13. TextSS = "00"
    14. TextTimeOut = ""
    15. End Sub
    16. Private _TextHeim As String
    17. Public Property TextHeim() As String
    18. Get
    19. Debug.WriteLine($"Variabe wird abgerufen. Der abgerufene Wert: '{_TextHeim}'")
    20. Return _TextHeim
    21. End Get
    22. Set(ByVal value As String)
    23. Debug.WriteLine($"Variable wird geändert von '{_TextHeim}' zu '{value}'")
    24. _TextHeim = value
    25. RaisePropertyChanged()
    26. Debug.WriteLine("Variable geändert und PropertyChanged geworfen.")
    27. End Set
    28. End Property
    29. Private _TextGast As String
    30. Public Property TextGast() As String
    31. Get
    32. Debug.WriteLine($"Variabe wird abgerufen. Der abgerufene Wert: '{_TextGast}'")
    33. Return _TextGast
    34. End Get
    35. Set(ByVal value As String)
    36. Debug.WriteLine($"Variable wird geändert von '{_TextGast}' zu '{value}'")
    37. _TextGast = value
    38. RaisePropertyChanged()
    39. Debug.WriteLine("Variable geändert und PropertyChanged geworfen.")
    40. End Set
    41. End Property
    42. Private _TextTorHeim As String
    43. Public Property TextTorHeim() As String
    44. Get
    45. Debug.WriteLine($"Variabe wird abgerufen. Der abgerufene Wert: '{_TextTorHeim}'")
    46. Return _TextTorHeim
    47. End Get
    48. Set(ByVal value As String)
    49. Debug.WriteLine($"Variable wird geändert von '{_TextTorHeim}' zu '{value}'")
    50. _TextTorHeim = value
    51. RaisePropertyChanged()
    52. Debug.WriteLine("Variable geändert und PropertyChanged geworfen.")
    53. End Set
    54. End Property
    55. Private _TextTorGast As String
    56. Public Property TextTorGast() As String
    57. Get
    58. Debug.WriteLine($"Variabe wird abgerufen. Der abgerufene Wert: '{_TextTorGast}'")
    59. Return _TextTorGast
    60. End Get
    61. Set(ByVal value As String)
    62. Debug.WriteLine($"Variable wird geändert von '{_TextTorGast}' zu '{value}'")
    63. _TextTorGast = value
    64. RaisePropertyChanged()
    65. Debug.WriteLine("Variable geändert und PropertyChanged geworfen.")
    66. End Set
    67. End Property
    68. Private _TextMM As String
    69. Public Property TextMM() As String
    70. Get
    71. Debug.WriteLine($"Variabe wird abgerufen. Der abgerufene Wert: '{_TextMM}'")
    72. Return _TextMM
    73. End Get
    74. Set(ByVal value As String)
    75. Debug.WriteLine($"Variable wird geändert von '{_TextMM}' zu '{value}'")
    76. _TextMM = value
    77. RaisePropertyChanged()
    78. Debug.WriteLine("Variable geändert und PropertyChanged geworfen.")
    79. End Set
    80. End Property
    81. Private _TextSS As String
    82. Public Property TextSS() As String
    83. Get
    84. Debug.WriteLine($"Variabe wird abgerufen. Der abgerufene Wert: '{_TextSS}'")
    85. Return _TextSS
    86. End Get
    87. Set(ByVal value As String)
    88. Debug.WriteLine($"Variable wird geändert von '{_TextSS}' zu '{value}'")
    89. _TextSS = value
    90. RaisePropertyChanged()
    91. Debug.WriteLine("Variable geändert und PropertyChanged geworfen.")
    92. End Set
    93. End Property
    94. Private _TextTimeOut As String
    95. Public Property TextTimeOut() As String
    96. Get
    97. Debug.WriteLine($"Variabe wird abgerufen. Der abgerufene Wert: '{_TextTimeOut}'")
    98. Return _TextTimeOut
    99. End Get
    100. Set(ByVal value As String)
    101. Debug.WriteLine($"Variable wird geändert von '{_TextTimeOut}' zu '{value}'")
    102. _TextTimeOut = value
    103. RaisePropertyChanged()
    104. Debug.WriteLine("Variable geändert und PropertyChanged geworfen.")
    105. End Set
    106. End Property
    107. Protected Overridable Sub RaisePropertyChanged(<CallerMemberName> Optional ByVal prop As String = "")
    108. RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(prop))
    109. End Sub
    110. Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
    111. Public Sub Heim(TextInput As String)
    112. TextHeim = TextInput
    113. End Sub
    114. Public Sub Gast(TextInput As String)
    115. TextGast = TextInput
    116. End Sub
    117. Public Sub TorHeim(TextInput As String)
    118. TextTorHeim = TextInput
    119. End Sub
    120. Public Sub TorGast(TextInput As String)
    121. TextTorGast = TextInput
    122. End Sub
    123. Public Sub MM(TextInput As String)
    124. TextMM = TextInput
    125. End Sub
    126. Public Sub SS(TextInput As String)
    127. TextSS = TextInput
    128. End Sub
    129. Public Sub TimeOut(TextInput As String)
    130. TextTimeOut = TextInput
    131. End Sub
    132. End Class


    XAML der WPF zur Visualisierung
    Spoiler anzeigen

    XML-Quellcode

    1. ​<Window x:Class="BindToCodebehind"
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    5. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    6. mc:Ignorable="d"
    7. Title="ShowGame" Height="400" Width="560" ResizeMode="NoResize" WindowStyle="None" AllowsTransparency="True" ShowInTaskbar="False" Topmost="True" Cursor="None">
    8. <Window.Background>
    9. <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
    10. <GradientStop Color="#FF04131D" Offset="0"/>
    11. <GradientStop Color="#FF0097FF" Offset="1"/>
    12. </LinearGradientBrush>
    13. </Window.Background>
    14. <Grid>
    15. <TextBlock HorizontalAlignment="Left" Margin="51,123,0,120" TextWrapping="Wrap" Text="{Binding TextTorHeim,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}" Width="197" RenderTransformOrigin="0.513,-1.269" FontFamily="Segoe UI Black" FontSize="113" LineStackingStrategy="BlockLineHeight" TextAlignment="Right">
    16. <TextBlock.Foreground>
    17. <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
    18. <GradientStop Color="Black" Offset="0"/>
    19. <GradientStop Color="#FF224372" Offset="1"/>
    20. </LinearGradientBrush>
    21. </TextBlock.Foreground>
    22. <TextBlock.Effect>
    23. <DropShadowEffect Direction="327" ShadowDepth="2"/>
    24. </TextBlock.Effect>
    25. </TextBlock>
    26. <TextBlock HorizontalAlignment="Left" Margin="306,123,0,120" TextWrapping="Wrap" Text="{Binding TextTorGast, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" Width="197" RenderTransformOrigin="0.513,-1.269" FontFamily="Segoe UI Black" FontSize="113" LineStackingStrategy="BlockLineHeight">
    27. <TextBlock.Foreground>
    28. <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
    29. <GradientStop Color="Black" Offset="0"/>
    30. <GradientStop Color="#FF224372" Offset="1"/>
    31. </LinearGradientBrush>
    32. </TextBlock.Foreground>
    33. <TextBlock.Effect>
    34. <DropShadowEffect Direction="327" ShadowDepth="2"/>
    35. </TextBlock.Effect>
    36. </TextBlock>
    37. <TextBlock HorizontalAlignment="Left" Margin="253,123,0,120" TextWrapping="Wrap" Text=":" Width="48" RenderTransformOrigin="0.513,-1.269" FontFamily="Segoe UI Black" FontSize="113" LineStackingStrategy="BlockLineHeight" TextAlignment="Center">
    38. <TextBlock.Foreground>
    39. <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
    40. <GradientStop Color="Black" Offset="0"/>
    41. <GradientStop Color="#FF224372" Offset="1"/>
    42. </LinearGradientBrush>
    43. </TextBlock.Foreground>
    44. <TextBlock.Effect>
    45. <DropShadowEffect Direction="327" ShadowDepth="2"/>
    46. </TextBlock.Effect>
    47. </TextBlock>
    48. <TextBlock HorizontalAlignment="Left" Margin="264,286,0,0" TextWrapping="Wrap" Text=":" Width="26" RenderTransformOrigin="0.513,-1.269" FontFamily="Segoe UI Black" FontSize="65" LineStackingStrategy="BlockLineHeight" TextAlignment="Center">
    49. <TextBlock.Foreground>
    50. <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
    51. <GradientStop Color="#FF615A32" Offset="0"/>
    52. <GradientStop Color="#FF9BAA3E" Offset="1"/>
    53. </LinearGradientBrush>
    54. </TextBlock.Foreground>
    55. <TextBlock.Effect>
    56. <DropShadowEffect Direction="327" ShadowDepth="2"/>
    57. </TextBlock.Effect>
    58. </TextBlock>
    59. <TextBlock HorizontalAlignment="Left" Margin="180,286,0,0" TextWrapping="Wrap" Text="{Binding TextMM, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" Width="84" RenderTransformOrigin="0.513,-1.269" FontFamily="Segoe UI Black" FontSize="65" LineStackingStrategy="BlockLineHeight" TextAlignment="Right">
    60. <TextBlock.Foreground>
    61. <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
    62. <GradientStop Color="#FF615A32" Offset="0"/>
    63. <GradientStop Color="#FF9BAA3E" Offset="1"/>
    64. </LinearGradientBrush>
    65. </TextBlock.Foreground>
    66. <TextBlock.Effect>
    67. <DropShadowEffect Direction="327" ShadowDepth="2"/>
    68. </TextBlock.Effect>
    69. </TextBlock>
    70. <TextBlock HorizontalAlignment="Left" Margin="290,286,0,0" TextWrapping="Wrap" Text="{Binding TextSS, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" Width="84" RenderTransformOrigin="0.513,-1.269" FontFamily="Segoe UI Black" FontSize="65" LineStackingStrategy="BlockLineHeight">
    71. <TextBlock.Foreground>
    72. <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
    73. <GradientStop Color="#FF615A32" Offset="0"/>
    74. <GradientStop Color="#FF9BAA3E" Offset="1"/>
    75. </LinearGradientBrush>
    76. </TextBlock.Foreground>
    77. <TextBlock.Effect>
    78. <DropShadowEffect Direction="327" ShadowDepth="2"/>
    79. </TextBlock.Effect>
    80. </TextBlock>
    81. <TextBlock HorizontalAlignment="Left" Margin="121,280,0,36" TextWrapping="Wrap" Text="{Binding TextTimeOut, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" Width="54" RenderTransformOrigin="0.513,-1.269" FontSize="62" LineStackingStrategy="BlockLineHeight" TextAlignment="Center" FontFamily="Century Gothic" FontWeight="Bold" Foreground="#FFDC4040">
    82. <TextBlock.Effect>
    83. <DropShadowEffect Direction="327" ShadowDepth="2"/>
    84. </TextBlock.Effect>
    85. </TextBlock>
    86. <TextBlock HorizontalAlignment="Left" Margin="374,280,0,36" TextWrapping="Wrap" Text="{Binding TextTimeOut, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" Width="54" RenderTransformOrigin="0.513,-1.269" FontSize="62" LineStackingStrategy="BlockLineHeight" TextAlignment="Center" FontFamily="Century Gothic" FontWeight="Bold" Foreground="#FFDC4040">
    87. <TextBlock.Effect>
    88. <DropShadowEffect Direction="327" ShadowDepth="2"/>
    89. </TextBlock.Effect>
    90. </TextBlock>
    91. <TextBlock HorizontalAlignment="Left" Margin="0,0,0,304" TextWrapping="Wrap" Text="{Binding TextHeim, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" Width="264" RenderTransformOrigin="0.513,-1.269" FontFamily="Segoe UI Black" FontSize="65" LineStackingStrategy="BlockLineHeight" TextAlignment="Center">
    92. <TextBlock.Foreground>
    93. <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
    94. <GradientStop Color="#FF94ACB8" Offset="0"/>
    95. <GradientStop Color="#FF1E3D59" Offset="1"/>
    96. </LinearGradientBrush>
    97. </TextBlock.Foreground>
    98. <TextBlock.Effect>
    99. <DropShadowEffect Direction="327" ShadowDepth="2"/>
    100. </TextBlock.Effect>
    101. </TextBlock>
    102. <TextBlock HorizontalAlignment="Left" Margin="296,0,0,304" TextWrapping="Wrap" Text="{Binding TextGast, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" Width="264" RenderTransformOrigin="0.513,-1.269" FontFamily="Segoe UI Black" FontSize="65" LineStackingStrategy="BlockLineHeight" TextAlignment="Center">
    103. <TextBlock.Foreground>
    104. <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
    105. <GradientStop Color="#FF94ACB8" Offset="0"/>
    106. <GradientStop Color="#FF1E3D59" Offset="1"/>
    107. </LinearGradientBrush>
    108. </TextBlock.Foreground>
    109. <TextBlock.Effect>
    110. <DropShadowEffect Direction="327" ShadowDepth="2"/>
    111. </TextBlock.Effect>
    112. </TextBlock>
    113. </Grid>
    114. </Window>


    So funktioniert offenbar alles wie gewünscht. :)




    VB1963 schrieb:

    Wenn du mit Neuinstallstionen das VS meinst, dann musst du diese Einstellungen immer danach neu setzen! VS wird leider so ausgeliefert...

    Ich habe VB Express 2010 und VS2017 neu installiert. Bei beiden Versionen muss die Einstellung neu gesetzt werden.

    ErfinderDesRades schrieb:

    Wenn eine mEThode nur eine einfache(!) Zeile enthält, kann man sie weglassen, und statt die Methode aufzurufen, die (einfache) Zeile gleich hinschreiben.

    Danke! Ich habe die Methoden entfernt und den relevanten Teil in Form1 wie folgt geändert:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    2. dlg.TextTorHeim = TextBox1.Text
    3. End Sub
    4. Private Sub TextBox2_TextChanged(sender As Object, e As EventArgs) Handles TextBox2.TextChanged
    5. dlg.TextTorGast = TextBox2.Text
    6. End Sub
    7. Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
    8. If CheckBox1.Checked Then
    9. dlg.TextTimeOut = "o"
    10. Else
    11. dlg.TextTimeOut = ""
    12. End If
    13. End Sub
    14. Private Sub TextBox3_TextChanged(sender As Object, e As EventArgs) Handles TextBox3.TextChanged
    15. dlg.TextHeim = TextBox3.Text
    16. End Sub
    17. Private Sub TextBox4_TextChanged(sender As Object, e As EventArgs) Handles TextBox4.TextChanged
    18. dlg.TextGast = TextBox4.Text
    19. End Sub
    20. Private Sub TextBox5_TextChanged(sender As Object, e As EventArgs) Handles TextBox5.TextChanged
    21. dlg.TextMM = TextBox5.Text
    22. End Sub
    23. Private Sub TextBox6_TextChanged(sender As Object, e As EventArgs) Handles TextBox6.TextChanged
    24. dlg.TextSS = TextBox6.Text
    25. End Sub
    @prinzip freut mich das du gefallen an meinen Tutorials findest und das sie dir geholfen haben.

    Hatte in letzter Zeit viel stress welches sich nun wieder etwas legt und werde demnächst wieder weiter machen können. Vielleicht springst ja auch du bald ganz auf WPF um. 8o

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.