【问题标题】:Silverlight 5 + AutoCompleteBox = BugSilverlight 5 + AutoCompleteBox = 错误
【发布时间】:2011-12-13 12:07:17
【问题描述】:

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

向主页添加一个 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”。

2) 点击按钮。

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

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

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

6) 以此类推,直到您选择一个新字母。然后重新开始。

【问题讨论】:

  • 你应该使用自定义自动完成工具包的自动完成功能

标签: autocomplete silverlight-toolkit silverlight-5.0 autocompletebox


【解决方案1】:

我找到了解决这种奇怪行为的方法。您需要一个从 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());
    }
}

【讨论】:

  • @Pawel Redmerski 非常感谢!!!!我在这个问题上陷入了死胡同......很好的解决方案!!!!
  • 谢谢伙计!还是很有帮助的!
猜你喜欢
  • 1970-01-01
  • 2017-05-23
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多