У меня есть настраиваемый элемент управления в приложении с открытым исходным кодом, который я хочу изменить.Событие TextChanged или ContentChanged в настраиваемом элементе управления, расширяющем UserControl WPF
Часть XAML выглядит следующим образом:
<controls:Scratchpad Grid.Row="1" Grid.Column="2"
Text="{Binding DataContext.KeyboardOutputService.Text, RelativeSource={RelativeSource AncestorType=controls:KeyboardHost}, Mode=OneWay}"/>
отделенного кода для управления блокнота выглядит следующим образом:
public class Scratchpad : UserControl
{
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register("Text", typeof (string), typeof (Scratchpad), new PropertyMetadata(default(string)));
public string Text
{
get { return (string) GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
}
}
Я хочу, чтобы вызвать обработчик события каждый раз, когда изменения текста в UserControl. Однако нет события TextChanged, которое я могу использовать в XAML.
Мой план состоял в том, чтобы сделать что-то вроде этого:
<controls:Scratchpad Grid.Row="1" Grid.Column="2"
Text="{Binding DataContext.KeyboardOutputService.Text, RelativeSource={RelativeSource AncestorType=controls:KeyboardHost}, Mode=OneWay}"
textChanged="EventHandler"/>
Однако событие «TextChanged» не существует в этом таможенный контроль.
Как вы можете видеть, ScratchPad расширяет UserControl. UserControl также расширяет ContentControl, и поэтому я думаю, что можно поместить текст в этот элемент управления, возможно, это событие «ContentChanged», о котором я не знаю.
Лучший, Питер.
См. [Как создать настраиваемое маршрутизируемое событие] (https://msdn.microsoft.com/en-us/library/ms752288 (v = vs.110) .aspx), а затем поднимите свой пользовательский TextChangedEvent в Свойство PropertyChangedCallback свойства Text (показано в ответе Эрика). – Clemens
Или объявите обычное событие CLR и запустите его в PropertyChangedCallback. – Clemens