0

私のアプリケーションでは、ユーザーはアイテムを に追加できますListBox。から選択した後、もう一度Return キーAutoCompleteBoxを押すことで、ユーザーが新しい項目を追加できるようにしたかったのです。プロパティをボタンに設定するだけで十分だと思いました。IsDefaultTrueAdd

MainWindow コードは次のようになります。

<ListBox Name="listBox1" />

<Button Name="button1" Content="Add" IsDefault="True" Click="button1_Click" />

<my:AutoCompleteBox Name="autoCompleteBox1" 
                IsTextCompletionEnabled="True"
                PreviewKeyDown="autoCompleteBox1_PreviewKeyDown"/>

フォーカスが保持されているために設定IsDefaultが機能しなかったため、押されたのがリターンキーであるかどうかを確認してイベントAutoCompleteBoxに応答し、ボタンにフォーカスを設定しようとしました。KeyDown

しかし、項目を選択した後にReturn キーを押しても、イベントは発生しませんでしたKeyDown。だから私は最終的にPreviewKeyDownイベントにサブスクライブし、これを行います:

public partial class MainWindow : Window
{
    ObservableCollection<string> myCollection = new ObservableCollection<string>();

    public MainWindow()
    {
        InitializeComponent();

        listBox1.ItemsSource = myCollection;
        autoCompleteBox1.ItemsSource = new string[] { "item1", "item2", "item3", "item4", "item5" };
    }

    private void autoCompleteBox1_PreviewKeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Return)
        {
            button1.Focus(); 
        }
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        if (autoCompleteBox1.SelectedItem != null)
            myCollection.Add((string)autoCompleteBox1.SelectedItem);
    }
}

しかし、ボタンはフォーカスを取得しません。からフォーカスを移動するにはどうすればよいAutoCompleteBoxですか?

4

1 に答える 1

0

KeyUp イベントを使用します。KeyDown は、フォーカスを変更するにはサイクルが早すぎます。

于 2012-09-16T19:06:05.660 に答える