Обновить текст в пользовательском элементе управления текстовым полем WPF с помощью Winform

#c# #.net #xml #wpf #winforms

#c# #.net #xml #wpf #winforms

Вопрос:

Я использую оба WinForm и WPF . Я пытаюсь выяснить, как обновить текст в моем WPF textbox control в моем WinForm приложении при нажатии кнопки. С помощью WinForm текстового поля я могу просто сделать MyTextBox.Text = counter , но с WPF я не могу. Почему и как вы это делаете?

Например, если я нажму на кнопку, в моем текстовом поле WPF должно быть подсчитано 1,2,3,4,5 … но этого не происходит.

Код WinForm

     int counter = 0;

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

    }
  

Пользовательский элемент управления текстовым полем пользователя WPF

 <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>
  

введите описание изображения здесь

Мои настройки пользовательского элемента управления WPF в WinForms

введите описание изображения здесь

Комментарии:

1. У вас странная привязка к текстовому полю с именем TextBox. Text="{Binding ElementName=textBox1, Path=Text}" ?

2. Я только что удалил это. до значения по умолчанию, которое было Text="TextBox" , но оно все еще не работает. Я вставил Text="{Binding ElementName=textBox1, Path=Text}" , потому что думал, что мне этого не хватает. Я пытался устранить это.

Ответ №1:

Привяжите свое текстовое поле к пользовательскому элементу управления следующим образом:

 <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"/>
  

В коде, лежащем в основе usercontrol, вы добавляете свойство зависимости:

     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));

  }
  

В вашем событии WinForm Button.Click вы можете обновить следующим образом:

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

Комментарии:

1. Спасибо, я действительно ценю это! 🙂