2014-05-15 92 views
0

我有一個自定義控件,基本上將ComboBoxTextBox包裝到自定義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) 
    { 
    } 
} 
+0

我想你可以做路由事件(http://msdn.microsoft.com/en-us/library/ms742806(v=vs.110).aspx),因爲我記得如果文本框是在同樣的視覺三,你可以簡單地在你的AutoCompleteTextBox構造函數中做:this.AddHandler(TextBox.TextChanged,new TextChangedEventHandler(yourMethodName));使用wpf自定義路由事件搜索教程 – iulian3000

+0

嘿約翰,我給了這個鏡頭,但它不會接受textbox.TextChanged,因爲它是一個TextChangedEventHandler而不是RoutedEventHandler。 –

+0

試試這個:this.AddHandler(TextBox.TextChangedEvent,new TextChangedEventHandler(yourMethodName));我還沒有輸入正確,只是從VS複製粘貼。使用此處理程序,您將攔截畫布中任何文本框中的任何文本更改事件。 – iulian3000

回答

1

一個新的事件添加到您的控件/類:

public event EventHandler<EventArgs> MyTextChanged; 

textBox_TextChanged做到這一點:

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

這可以比您的自定義事件參數得到增強,如果你想等

如果剛剛命名它MyTextChanged來標記新事件是什麼。您當然可以將其命名爲TextChanged

+0

完美,這正是我一直在尋找的。看起來我剛剛結束了這個過程,並且混合了自定義事件的創建。謝謝。 –