刚刚安装了几天前发布的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)依此类推,直到你选了一封新信。然后它重新开始。
答案 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());
}
}