2012-11-20 172 views
0

基礎:我正在使用MVVM模式或它的一個子集。
WPF設置焦點問題

在我的主窗口,我打開了一個新的DataContext一個用戶控件一個按鈕的功能看起來有點像這樣:

public void SetUserControl() 
{ 
    UCDatacontext = new UCViewModel(this); 
    base.OnPropertyChanged("UCDatacontext"); 
    UCViewVisibilty = Visibility.Visible; 
    UCDatacontext.IniFocus(); 
} 

然後當我做我關閉的用戶控件和處置DataContext的。現在我遇到的問題是,我似乎無法讓焦點設置正常工作,我在用戶控件中有一個Textbox,當視圖變爲可見時,我想將焦點設置爲焦點。然而,在我第一次嘗試設置焦點時,它只填充文本框並且沒有閃爍的插入符號,經過調查後,我相信這是因爲TB沒有獲得鍵盤焦點(只有邏輯焦點),但是甚至在明確設置鍵盤焦點之後,我仍然可以得到無影無蹤的脫字符號,並且只有在結核病點擊之後才能獲得焦點。我用來設置焦點的方法類似於描述的方法here
如果在視圖中我通過在文本框的FocusSet事件中打印出來進行一些寫入調試,但它只是在第一次調用SetUserControl()時進行設置。如果我再次調用SetUserControl(),它不會執行任何操作,除非使視圖可見但不觸發焦點集事件。
下面的代碼從主窗口行:

<Grid Grid.ColumnSpan="5" Grid.RowSpan="5" Visibility="{Binding Path=UCViewVisibilty }" x:Name="UCGrid" > 
    <Grid.Effect> 
     <DropShadowEffect /> 
    </Grid.Effect> 
    <View:UCView DataContext="{Binding Path=UCDatacontext}" />  
</Grid> 

而且用戶控件網:

<Grid > 
    <TextBox Uid="UCTB" localExtensions:FocusExtension.IsFocused="{Binding Path=UCTBFocus}" Height="23" HorizontalAlignment="Left" Margin="113,56,0,0" Name="UCTB" VerticalAlignment="Top" Width="165" Text="{Binding Path=UCTBContent, UpdateSourceTrigger=PropertyChanged}" GotFocus="UCTB_GotFocus" /> 
</Grid > 

焦點設置在UserControlViewModel,和用戶控件之後被渲染設置。

回答

0

事實證明,用代碼,爲什麼焦點沒有被正確設置在視圖中,因爲在視圖模型的結合是這種情況的原因擺弄周圍後:

bool _tBfocus; 
    public bool UCTBFocus 
    { 
     get { return _tBfocus; } 
     set 
     { 
      _tBfocus= value; 
      base.OnPropertyChanged("UCTBFocus"); 

     } 

代替:

bool _tBfocus; 
    public bool UCTBFocus 
    { 
     get { return _tBfocus; } 
     set 
     { 
      if (_tBfocus == value) 
       return; 
      _tBfocus= value; 
      base.OnPropertyChanged("UCTBFocus"); 

     } 
    } 

改變它之後的一切工作得很好:/,但如果有人能向我解釋爲什麼這個煩惱,我有被我將非常感激:)

0

就像這樣從上到下依次設置焦點。

InitializeComponent(); 
     FocusManager.SetFocusedElement(this, TabItem); //this is Window , TabItem is UserControl in this Window 
     FocusManager.SetFocusedElement(TabItem, TextBox); // TabItem is UserControl and TextBox is Control in TabItem UC 

我希望這會有所幫助。

+0

問題仍然PERSI引起sts:/,由於某種原因文本框的GotFocus事件只在第一次嘗試時被調用。 – Heinrich