#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. Спасибо, я действительно ценю это! 🙂