当您单击或点击某个按钮时,它会使其聚焦,这样当您按空格键或按Enter键时,它会再次触发该按钮。我不希望这种情况发生。
我试过这个:button1.Focus(Windows.UI.Xaml.FocusState.Unfocused);
但是仍然会发生不需要的行为(按空格键或Enter键再次触发按钮)。我也尝试使用Programmatic和Keyboard FocusStates将焦点设置到另一个按钮,但也没有修复它。
任何帮助,尤其是解释为什么会发生这种情况的行为,都将不胜感激。
答案 0 :(得分:0)
您可以将TabStop属性设置为False,但请注意,这样做会禁止用户通过键盘使用按钮。
<Button Content="Click Me By Pointer!" IsTabStop="False"/>
<强>更新强>
正如msdn所述:
通过使用FocusState.Unfocused作为参数调用此方法,无法从控件中删除焦点。不允许使用此值并导致异常。要从控件中移除焦点,请将焦点设置为其他控件。
另一种实现此目的的方法是,当按钮即将通过指针获得焦点时,将焦点设置为先前聚焦的元素。不幸的是,GettingFocus事件不适用于Button类(也许是因为最终版本尚未发布?)所以我们应该使用GotFocus事件,它很难看,但是有效。
bool moveFocus = false;
public MainPage() {
this.InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e) {
if (moveFocus) {
UIElement focusedElement = FocusManager.FindNextFocusableElement(FocusNavigationDirection.Right);
if (focusedElement is Control) {
((Control)focusedElement).Focus(FocusState.Programmatic);
}
}
}
private void Button_GotFocus(object sender, RoutedEventArgs e) {
Button button = (Button)sender;
moveFocus = (button.FocusState == FocusState.Pointer);
}
请注意,我将FocusNavigationDirection.Right传递给FocusManager.FindNextFocusableElement以获取正确的元素,我应该使用FocusNavigationDirection.Previous而不是获取前一个元素,但它因未知原因返回null。