WPF UserControl с TextBox, используйте событие TextChanged C #

У меня есть пользовательский элемент управления с меткой 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}"
 />

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


person MeisterGao    schedule 23.06.2011    source источник
comment
Вы говорите, что хотите определить событие для своего UserControl и подключиться к нему? Или вы хотите, чтобы ваша привязка работала правильно? Или что-то другое>   -  person Ed Bayiates    schedule 23.06.2011


Ответы (2)


Этот вопрос действительно непонятный. Вы хотите, чтобы ваш пользовательский элемент управления поддерживал событие 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);
   }
}
person Robert Rossney    schedule 23.06.2011

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

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

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

person CodeWarrior    schedule 23.06.2011