如何在选择项目后从自动完成框移动焦点?

时间:2012-09-16 13:58:01

标签: c# .net wpf wpftoolkit

在我的应用程序中,用户可以将项目添加到ListBox。我希望用户能够通过再次按返回键AutoCompleteBox中选择新项后添加新项。我认为在IsDefault按钮上将True属性设置为Add就足够了。

这就是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事件按下了并尝试将焦点设置到按钮。

但是在选择项目后按返回键并未触发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

1 个答案:

答案 0 :(得分:0)

使用KeyUp事件。 KeyDown在更改焦点的周期中还为时过早。