好吧,我知道這個標題看起來像它有所有答案,但沒有在這裏找到答案爲我工作。所以,在這裏。WPF每個TabItem的初始焦點
我有這樣的佈局:
<Window>
<Grid>
<DockPanel>
<TabControl>
<TabItem>
<Page x:Name="p">
<Grid x:Name="g2">
<TabControl x:Name="tc">
<TabItem x:Name="ti1">
<StackPanel x:Name="sp">
<C:TextBox x:Name="txt"/>
</StackPanel>
</TabItem>
<TabItem x:Name="ti2">
<C:DataGrid x:Name="dg"/>
</TabItem>
</TabControl>
</Grid>
</Page>
</TabItem>
</TabControl>
</DockPanel>
</Grid>
</Window>
現在,我的目標是當ti2
TabItem
被選中時ti1
TabItem
被選擇把重點放在txt
TextBox
和dg
DataGrid
。另外,我真的很喜歡在XAML
中設置它。
注意:我只能使用在這裏命名的控件,所以直到Page
控件。
有什麼我試過到目前爲止:
- 設置上的所有父控件的
FocusManager.FocusedElement="{Binding ElementName=txt}"
在txt
Control
的父樹(直到Page
)。 - 設置
FocusManager.FocusedElement="{Binding RelativeSource={RelativeSource Self}}"
對txt
和dg
控件。 通過設定焦點在代碼
TabControl
的SelectionChanged
事件:- 如果(ti1.IsSelected) { tc.UpdateLayout(); FocusManager.SetFocusedElement(sp,txt); }
- 和
- 如果(ti1.IsSelected) { tc.UpdateLayout(); txt.Focus(); }
TextBox
和DataGrid
創建控件一樣UserControl
S,但實際上是繼承TextBox
和DataGrid
,像這樣的類:
<TextBox ... </TextBox>
和
public partial class TextBox : System.Windows.Controls.TextBox
由於我說,XAML
解決方案是需要的,但如果前者不可行,我也會解決一個代碼。
很高興看到每次嘗試的結果(又名發生了什麼)。既然你嘗試了最明顯的,那麼讓[mcve](https://stackoverflow.com/help/mcve)僅僅複製和播放會很好。 – Sinatr
@Sinatr我會稍後嘗試,當有更多的時間,但現在我可以說,除了'SetFocusedElement'之外,所有的解決方案都沒有任何效果。但是使用'FocusManager'在'TextBox'中產生了可見的'Caret',但是焦點不在那裏,我無法輸入。而且這隻在頁面初始打開時起作用,當我選擇其他選項卡時,並且回到第一個選項卡時,即使是'Caret'也不可見。 – Adder
@Adder,請不要大幅編輯其他人的答案以包含其他信息。在你的具體情況下,我建議你投票選出有幫助的答案(如果你喜歡的話),併發布你自己的答案和附加信息並接受它。請參閱:https://stackoverflow.com/help/self-answer – Alex