4

剛剛安裝了SL5和工具包,這是前幾天發佈的。
當您將AutoCompleteBox的Text屬性設置爲string.Empty時,會發生該錯誤。它會導致AutoCompleteBox處於錯誤狀態。重現錯誤:Silverlight 5 + AutoCompleteBox = Bug

添加一個AutoCompleteBox和一個按鈕到主頁面。註冊到TextChanged和Click事件。這是後臺代碼:

public partial class MainPage : UserControl 
{ 
    public MainPage() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     auto.Text = string.Empty; 
    } 

    private void auto_TextChanged(object sender, RoutedEventArgs e) 
    { 
     // Put a break point here. 
    } 
} 

在運行時:

1) 「AA」 型到autobox。

2)單擊按鈕。

3)鍵入「q」。 (TextChanged仍然被調用)。

4)刪除「q」 - TextChanged爲而不是被調用。

5)再次輸入「q」 - TextChanged爲而不是被調用。

6)等等,直到你選擇一個新的字母。然後它重新開始。

+0

您應該使用自定義的自動完成instad工具包的自動完成功能 –

回答

6

我發現了這種奇怪行爲的解決方法。您需要一個從AutoCompleteBox派生的控件,並重寫OnApplyTemplate方法來查找AutoCompleteBox的內部TextBox。

當內部TextBox TextChanged事件觸發時,您需要手動觸發AutoCompleteBox控件的TextChanged事件。

public class CustomAutoComplete : AutoCompleteBox 
{ 
    TextBox mytext; 

    public override void OnApplyTemplate() 
    { 
     base.OnApplyTemplate(); 
     mytext = GetTemplateChild("Text") as TextBox; 
     mytext.TextChanged += new System.Windows.Controls.TextChangedEventHandler(mytext_TextChanged); 
    } 

    void mytext_TextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e) 
    { 
     this.Text = mytext.Text; 
     OnTextChanged(new RoutedEventArgs()); 
    } 
} 
+0

偉大的工作!節省我很多。謝謝 – tomasK

+0

@Pawel Redmerski非常感謝!我是在一個死衚衕whith這個問題...偉大的解決方案! – jcgalveza

+0

謝謝隊友!它仍然非常有幫助! –