2015-11-08 5 views
1

Так, например, если у меня есть 2 текстовых поля в WFA. Следующий код работает.Текстовое поле Текст Изменено событие в WPF

private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
     textBox2.Text = textBox1.Text; 
    } 

И я получаю это. Текст во втором текстовом поле соответствует тексту в первом, когда я его меняю. enter image description here

Но когда дело доходит до WPF, я получаю совершенно другое поведение. Когда я это сделаю.

private void textBox_TextChanged(object sender, TextChangedEventArgs e) 
    { 
     textBox1.Text = textBox.Text; 
    } 

И нажмите Ctrl + F5, чтобы проверить приложение, ничего не происходит. В журнале говорится, что «Build Succeeded» и ничего. Что здесь не так?

И вот код XAML.

<Window x:Class="TextBoxTest.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:TextBoxTest" 
    mc:Ignorable="d" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <TextBox x:Name="textBox" HorizontalAlignment="Left" Height="23" Margin="212,77,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120" TextChanged="textBox_TextChanged"/> 
    <TextBox x:Name="textBox1" HorizontalAlignment="Left" Height="23" Margin="212,124,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/> 

</Grid> 

+2

Можете ли вы показать свой XAML для 'TextBox' тоже? –

+1

Этот код работает для меня. Это должно быть проблемой с вашим кодом XAML. Я создал x: Name = "textBox1" для первого свойства Text Box и x: Name = "textBox2" для второго. – miechooy

+0

Где я могу добавить код XAML? Он говорит, что слишком долго для комментария. – Roman

ответ

3

Вы столкнулись с нулевым ссылочным исключением. Когда создается элемент управления textBox, он вызывает событие textChange на textBox1, и к этому моменту textBox1 не создается и поэтому является нулевым. Вы можете просто изменить порядок текстовых полей в XAML, и все будет в порядке. Но есть более хороший способ сделать это, непосредственно в XAML с Переплетом:

<TextBox x:Name="textBox" /> 
<TextBox x:Name="textBox1" Text="{Binding ElementName=textBox, Path=Text}" /> 

(я исключил некоторые атрибуты, чтобы сделать пример более чистым) В зависимости от того, когда вы хотите другое текстовое поле для обновления вы можете добавить UpdateSourceTrigger к привязке:

Text="{Binding ElementName=textBox, Path=Text, UpdateSourceTrigger=PropertyChanged}" 
+0

Спасибо за ответ. Я просто попробовал, все равно не помог, но ... Вся причина моей проблемы в том, что я и идиот. Проблема заключалась в том, что текстовое значение textBox по умолчанию было «TextBox», и из-за этого программа не могла запускаться, несмотря на отсутствие ошибок. – Roman

Смежные вопросы