我有一个自定义控件,它基本上将ComboBox
和TextBox
包装到自定义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)
{
}
}
答案 0 :(得分:1)
向您的控件/类添加新事件:
public event EventHandler<EventArgs> MyTextChanged;
在textBox_TextChanged
执行此操作:
if (MyTextChanged != null)
{
MyTextChanged(this, EventArgs.Empty);
}
如果您愿意,可以使用自定义事件参数来增强此功能
如果只是将其命名为 MyTextChanged 以标记新事件的内容。您当然可以将其命名为 TextChanged 。