WPF UserControl с TextBox, используйте событие TextChanged C # - PullRequest
0 голосов
/ 23 июня 2011

У меня есть пользовательский пользовательский контроль с надписью TextBox (Border, заключенный в Label и TextBox с TextBox, перекрывающим метку). Я нахожу несколько (работающих) примеров того, как заставить функцию TextChanged работать при вызове из моего UserControl.

Только фрагмент текстового поля:

<TextBox 
FontSize="{Binding Path=DefaultFontSize}"
Style="{StaticResource WatermarkTextBox}"
Padding="{Binding Path=TextPadding}"
Tag="{Binding Path=TextValue}"
/>

Я пытался использовать RoutedEventHandler, как я делал с событием Click моей кнопки, но это не сработало. Как мне это получить, так что, скажем, я использую в окне, это требуется:

<MyControl:LabeledTextBox
    TextBoxChange="Some_Event"
    TextValue="{Binding SomethingOrOther}"
 />

что он правильно сработает и сделает нужную функцию

Ответы [ 2 ]

3 голосов
/ 23 июня 2011

Этот вопрос действительно неясен.Вы хотите, чтобы ваш пользовательский элемент управления поддерживал событие TextChanged, которое возникает при изменении текста в TextBox?Если это так, вам нужно реализовать это в коде позади.

Сначала объявите событие:

public event TextChangedEventHandler TextChanged;

Затем добавьте обработчик события в TextBox:

<TextBox TextChanged="TextBox_TextChanged" ... />

и в выделенном коде:

private void TextBox_TextChanged(object sender, TextChangedEventArgs args)
{
   TextChangedEventHandler h = TextChanged;
   if (h != null)
   {
      h(this, args);
   }
}
2 голосов
/ 23 июня 2011

Если вы используете MVVM (или если ваша привязка TextValue связана с чем-то, к чему вы можете перейти и отредактировать), вы можете поместить логику, которую вы хотите выполнить, в установщик.

Итак, допустим, вы привязываетесь к свойству MyTextBoxValue. Установите режим привязки в XAML на два пути, а в установщике установите логику или вызовите другой метод.

Если вы хотите, чтобы код запускался каждый раз, когда вы печатаете, установите UpdateSourceTrigger=PropertyChanged в XAML, если вы хотите, чтобы код запускался только тогда, когда ввод текста "завершен", установите UpdateSourceTrigger=LostFocus.

...