4

刚刚安装了几天前发布的 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) 以此类推,直到您选择一个新字母。然后重新开始。

4

1 回答 1

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());
    }
}
于 2012-02-28T11:04:53.277 回答