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 に答える