在C#中冒泡WPF控件事件

时间:2014-05-15 18:17:21

标签: c# wpf

我有一个自定义控件,它基本上将ComboBoxTextBox包装到自定义AutoCompleteTextBox中。我试图将TextBox.TextChanged事件冒充到我的自定义控件AutoCompleteTextBox,因此我可以像通过WPF中的任何其他事件一样订阅事件,方法是声明用于订阅者的方法。 XAML并在后面的代码中实例化该方法。

如何让TextBox.TextChanged事件触发AutoCompleteTextBox的新事件,例如,TextChanged,以便我可以订阅AutoCompleteTextBox.TextChanged

我在MSDN上发现了很多关于它的问题,但我遇到了与我的实例有关的问题。任何帮助将不胜感激

以下是该类的精简版本,该版本应提供与要触发的TextBox.TextChanged事件的实现类相关的所有必要组件。

   public partial class AutoCompleteTextBox : Canvas
{

    private VisualCollection controls;
    public TextBox textBox;
    private ComboBox comboBox;

    public AutoCompleteTextBox()
    {
        controls = new VisualCollection(this);

        // set up the text box and the combo box
        comboBox = new ComboBox();
        comboBox.IsSynchronizedWithCurrentItem = true;
        comboBox.IsTabStop = true;
        comboBox.TabIndex = 1;

        textBox = new TextBox();
        textBox.TextWrapping = TextWrapping;
        if (MaxLength > 0)
        {
            textBox.MaxLength = MaxLength;
        }
        textBox.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
        textBox.VerticalContentAlignment = TextWrapping == System.Windows.TextWrapping.NoWrap ? System.Windows.VerticalAlignment.Center : System.Windows.VerticalAlignment.Top;
        textBox.TextChanged += new TextChangedEventHandler(textBox_TextChanged);
        textBox.TabIndex = 0;

        controls.Add(comboBox);
        controls.Add(textBox);
    }

    public int MaxLength { get; set; }

    private void textBox_TextChanged(object sender, TextChangedEventArgs e)
    {
    }
}

1 个答案:

答案 0 :(得分:1)

向您的控件/类添加新事件:

public event EventHandler<EventArgs> MyTextChanged;

textBox_TextChanged执行此操作:

if (MyTextChanged != null)
{
    MyTextChanged(this, EventArgs.Empty);
}

如果您愿意,可以使用自定义事件参数来增强此功能

如果只是将其命名为 MyTextChanged 以标记新事件的内容。您当然可以将其命名为 TextChanged