在我的应用程序中,用户可以将项目添加到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
但是在选择一个项目后按下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
?