焦點由各種屬性管理,如IsTabStop
,TabIndex
,IsHitTestVisible
和FocusManager
類。一旦窗口被激活,就有內置的功能來聚焦第一個可聚焦元素,而這種行爲通常是不可定製的。
我們可以指定不同的元素集中,而不是文本框一樣,也就是說,網頁本身:
<Page IsTabStop="True">
<TextBox/>
</Page>
這工作,因爲該頁面獲得最初的重點,而不是文本框,但現在該頁面參與標籤行爲,這是稍微不合需要的。
通常,當您單擊聚焦控件時,即使RootScrollViewer不是製表位(因此它無法通過製表符合焦),框架將焦點置於RootScrollViewer上。如果我們可以在頁面加載時關注RootScrollViewer,則框架將檢測到的某些內容具有焦點,並且不會嘗試集中第一個元素。
<Page Loaded="onPageLoaded">
<TextBox/>
</Page>
private ScrollViewer getRootScrollViewer()
{
DependencyObject el = this;
while (el != null && !(el is ScrollViewer))
{
el = VisualTreeHelper.GetParent(el);
}
return (ScrollViewer)el;
}
private void onPageLoaded(object sender, RoutedEventArgs e)
{
getRootScrollViewer().Focus(FocusState.Programmatic);
}
這是最「優雅」的方式,我知道,以防止文本從得到自動對焦。
您可以將焦點放在哪些元素上?或者是文本框是您網站上唯一的控件? – HimBromBeere
@HimBromBeere我猜可以通過編程將焦點放在TextBox後面的下一個元素上。但是,我有一個(在我看來)相當隨心所欲,並不是那麼優雅的解決方案。在最好的世界中,直到我點擊它或按下標籤之前,控件纔會被聚焦。但也許這不是事情的方式... –