在我的应用程序中,用户可以将项目添加到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
?
答案 0 :(得分:0)
使用KeyUp事件。 KeyDown在更改焦点的周期中还为时过早。