我有一個自定義控件,基本上將ComboBox
和TextBox
包裝到自定義AutoCompleteTextBox
中。我試圖將TextBox.TextChanged
事件冒泡到我的自定義控件AutoCompleteTextBox
,所以我可以像使用WPF中的任何其他事件一樣訂閱事件,方法是聲明用於XAML中訂閱服務器的方法並在代碼中實例化該方法背後。在C中冒泡WPF控件事件#
如何讓TextBox.TextChanged
事件觸發一個名爲TextChanged的AutoCompleteTextBox
的新事件,以便我可以訂閱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)
{
}
}
我想你可以做路由事件(http://msdn.microsoft.com/en-us/library/ms742806(v=vs.110).aspx),因爲我記得如果文本框是在同樣的視覺三,你可以簡單地在你的AutoCompleteTextBox構造函數中做:this.AddHandler(TextBox.TextChanged,new TextChangedEventHandler(yourMethodName));使用wpf自定義路由事件搜索教程 – iulian3000
嘿約翰,我給了這個鏡頭,但它不會接受textbox.TextChanged,因爲它是一個TextChangedEventHandler而不是RoutedEventHandler。 –
試試這個:this.AddHandler(TextBox.TextChangedEvent,new TextChangedEventHandler(yourMethodName));我還沒有輸入正確,只是從VS複製粘貼。使用此處理程序,您將攔截畫布中任何文本框中的任何文本更改事件。 – iulian3000