2016-10-21 3 views
1

Ich verwende beide WinForm und WPF. Ich versuche herauszufinden, wie ich den Text in meiner WPF textbox control in meiner WinForm Anwendung auf Knopfdruck aktualisieren kann. Mit WinForm Textfeld kann ich einfach MyTextBox.Text = counter tun, aber mit WPF kann ich nicht. Warum und wie machst du das?Aktualisieren Sie Text in WPF Textfeld Benutzersteuerelement mit Winform

Zum Beispiel, wenn ich auf die Schaltfläche klicke, sollte meine WPF-Textbox 1,2,3,4,5 hochzählen ... aber das tut es nicht.

WinForm-Code

int counter = 0; 

    private void counter_btn_Click(object sender, EventArgs e) 
    { 
     counter++; 
     CountTxtBx.Text = counter.ToString(); 
     CountTxtBx.Update(); 
     Console.WriteLine(counter); 

    } 

WPF Benutzer TextBox User Control

<UserControl x:Class="textbox_Update.UserControl1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:local="clr-namespace:textbox_Update" 
     mc:Ignorable="d" 
     d:DesignHeight="50 
     " d:DesignWidth="239"> 
<Grid> 
    <TextBox x:Name="textBox" HorizontalAlignment="Left" Height="50" TextWrapping="Wrap" Text="{Binding ElementName=textBox1, Path=Text}" VerticalAlignment="Top" Width="239" FontSize="20" Padding="0,7,0,0"/> 

</Grid> 

enter image description here

Meine WPF Benutzersteuerungseinstellungen in WinForms

enter image description here

+0

Sie haben eine seltsame Bindung auf der Textbox benannte TextBox. 'Text =" {Binding ElementName = TextBox1, Pfad = Text} "'? –

+1

Ich habe das gerade entfernt. zu seinem Standard, der 'Text = "TextBox" 'war, aber es funktioniert immer noch nicht. Ich habe 'Text =" {Binding ElementName = textBox1, Path = Text} "' weil ich dachte, dass ich das vermisse. Ich habe versucht, es zu beheben. – taji01

Antwort

1

Bind Ihre Textbox in der Benutzersteuerung wie folgt aus:

<TextBox x:Name="textBox" HorizontalAlignment="Left" Height="50" TextWrapping="Wrap" Text="{Binding RelativeSource={RelativeSource AncestorType=UserControl}, Path=CounterValue}" VerticalAlignment="Top" Width="239" FontSize="20" Padding="0,7,0,0"/> 

In Code hinter der Usercontrol Sie eine Abhängigkeitseigenschaft hinzu:

public int CounterValue 
    { 
     get { return (int)GetValue(CounterValueProperty); } 
     set { SetValue(CounterValueProperty, value); } 
    } 

    // Using a DependencyProperty as the backing store for CounterValue. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty CounterValueProperty = 
     DependencyProperty.Register("CounterValue", typeof(int), typeof(UserControl1), new PropertyMetadata(0)); 

    } 

In Ihrem WinForm Button.Click Fall, dass Sie kann wie folgt aktualisieren:

private void button1_Click(object sender, EventArgs e) 
{ 
    (CountTxBx.Child as UserControl1).CounterValue++; 
} 
+1

Vielen Dank, ich schätze es wirklich! :) – taji01

Verwandte Themen