Silverlight 5 + AutoCompleteBox = Bug

时间:2011-12-13 12:07:18

标签: autocomplete silverlight-toolkit silverlight-5.0 autocompletebox

刚刚安装了几天前发布的SL5和工具包 将AutoCompleteBox的Text属性设置为string.Empty时会发生错误。它导致AutoCompleteBox处于错误状态。重现错误:

将AutoCompleteBox和Button添加到主页面。注册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”。

2)点击按钮。

3)输入“q”。 (仍调用TextChanged)。

4)删除“q” - TextChanged 被调用。

5)再次输入“q” - TextChanged 被调用。

6)依此类推,直到你选了一封新信。然后它重新开始。

1 个答案:

答案 0 :(得分: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());
    }
}