0

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

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 回答