扩展UserControl WPF

时间:2017-02-10 14:07:49

标签: wpf xaml user-controls textchanged asp.net-customcontrol

我想在一个开源应用程序中使用自定义控件。

XAML看起来像这样:

<controls:Scratchpad Grid.Row="1" Grid.Column="2"
                         Text="{Binding DataContext.KeyboardOutputService.Text, RelativeSource={RelativeSource AncestorType=controls:KeyboardHost}, Mode=OneWay}"/>

Scratchpad控件的代码隐藏如下:

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中更改文本时触发事件处理程序。但是,我没有可以在XAML中使用的TextChanged事件。

我的计划是做这样的事情:

<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”事件。

最好,彼得。

2 个答案:

答案 0 :(得分:1)

两个选项:

  1. (MVVM方式)如果更改是为了反映域模型中的内容,可能此更改最适合在viewmodel中处理

  2. (控制方式)您是否考虑过在DependencyProperty中添加更改的处理程序?

    container

答案 1 :(得分:0)

非常感谢你的回答Eric。

我最终在“KeyboardOutputService.Text”的Setter中添加了一行代码。但是,如果我要添加一个OnTextChanged事件处理程序,我会尝试你的方法。我可能会在以后遇到同样的问题,所以我会保持这个线程。

非常感谢。