在WPF中,默認情況下,當焦點控件變爲不可見時,焦點將更改爲下一個可調焦的父容器。有沒有一種通用的方式將焦點轉移到下一個可調焦的兄弟控制上?例如,給定這個人爲的例子:當控件變得不可見時,如何將焦點移至下一個兄弟而不是父項?
<StackPanel Focusable="True">
<Button Height="30" Width="150" Click="Button_Click">First</Button>
<Button Height="30" Width="150">Second</Button>
</StackPanel>
與此事件處理程序來隱藏第一個按鈕:
private void Button_Click(object sender, RoutedEventArgs e)
{
((Button) sender).Visibility = Visibility.Collapsed;
}
如果標籤的第一個按鈕,然後按Enter,在StackPanel中獲得焦點。我想要第二個按鈕來獲得焦點。
我希望有一個通用的解決方案(相對於通過代碼背後的特定元素設置焦點),因爲我在我的應用程序中有幾個位置,這是鍵盤導航的一個問題。
是否[FocusManager.IsFocusScope](https://msdn.microsoft.com /en-us/library/system.windows.input.focusmanager.isfocusscope(v=vs.110).aspx)在StackPanel上有這種效果嗎? –
是的,它的行爲方式相同。如果直接父級將IsFocusScope設置爲false,那麼WPF似乎只是走到樹上找到第一個可調焦的父控件,然後將其聚焦。 (實際上,這些容器是用戶控件或ListBox,可以合法獲得焦點的東西,而不是StackPanels。) –