2017-01-31 32 views
0

這是一個MVVM WPF問題,c#。 內的窗口我有一個標籤控件,看起來像這樣如何將焦點設置爲標籤視圖選擇的視圖(用戶控件)中的文本框

<TabControl TabStripPlacement="Top" > 
    <TabItem Style="{StaticResource Tabitemstyle}"> 
    <TabItem.Header> 
    <Label Content="Home" Style="{StaticResource Tablablestyle}"/> 
    </TabItem.Header> 
    <v:HomePageView/> 
    </TabItem> 
    <TabItem .... 
    <v:OtherPageView/> 

的訣竅是不存在,我希望有輸入焦點當用戶選擇第二個選項卡中的第2個標籤項內的文本。

我已經嘗試了一些解決方案,但最近的一個,到目前爲止(使用數據觸發式的,或聚焦元素)幾乎工程:

我可以看到光標旨在在文本框中,但它不閃爍。似乎焦點仍在外部窗口中的選項卡控件上,而不是由OtherPageView.xaml定義的視圖中的文本框元素。當我點擊標籤一次,一切都好,但這是我試圖減輕用戶不得不做的。

回答

0

我背後使用代碼:

  • 聽上的TabItem內容的可視性變化事件(即v:主頁)

  • 查找文本框UI元素(你可以簡單地給在XAML文本框中的名稱 和從代碼指它後面)

  • 接着,將焦點設置上使用UIElement.Focus文本框()方法

  • 最後,如果鍵盤沒有對焦,請使用Keyboard.Focus(...)方法將鍵盤對準文本框。

+0

謝謝。我的代碼類似於http://stackoverflow.com/questions/17063014/tabcontrols-containing-different-user-controls-using-mvvm?rq=1雖然問題是不同的。該程序有5個選項卡,其中4個我希望在選擇該選項卡時將焦點設置到特定的文本框。有沒有辦法只是聽視圖本身變得活躍?如何告訴外部窗口中的選項卡控件失去焦點並將其提供給v:OtherPageView? NB:在OtherPageView中,我可以使用MVVM燈光消息設置控件,在用戶與該視圖進行交互之後。 – user3564895

+0

我不確定我是否理解你: 每次你點擊一個標籤項時,WPF tabcontrol的默認行爲就是重新創建它的內容視圖 - >這個視圖可以在這個時候獨立於TabControl嘗試去控制使用上述方法的焦點 我不熟悉MVVM Light,但是您可以在選項卡控件上使用SelectionChanged事件,並在其處理程序中試圖找出TabControl.Content屬性中使用的視圖。 – Ahmad

+0

從XAML(OtherPageView.xaml)調用後面的代碼IsVisibleChanged =「UserControl_IsVisibleChanged」然後使用http://stackoverflow.com/questions/3971179/wpf-tabcontrol-on-selectionchanged-set-focus-to-a-text-field該頁面的xaml.cs(如果可見)Despatcher.BeginInvoke(new Action(()=> {boxname.Focus();}));它的工作原理。 – user3564895

相關問題