基礎:MVVMパターンまたはそのサブセットを使用しています。
メインウィンドウには、新しいDataContextでユーザーコントロールを開くボタンがあります。関数は次のようになります。
public void SetUserControl()
{
UCDatacontext = new UCViewModel(this);
base.OnPropertyChanged("UCDatacontext");
UCViewVisibilty = Visibility.Visible;
UCDatacontext.IniFocus();
}
そして、完了したら、usercontrolを閉じてDataContextを破棄します。今私が抱えている問題は、フォーカス設定が正しく機能していないように見えることです。ビューが表示されたときにフォーカスを設定したいテキストボックスがユーザーコントロールにあります。ただし、初めてフォーカスを設定しようとすると、テキストボックスが点滅しないカレットで埋められるだけです。調査の結果、TBがキーボードフォーカス(論理フォーカスのみ)を取得していないためであると考えられます。キーボードのフォーカスを明示的に設定した後も、点滅しないカレットが表示されます。フォーカスが取得されるのは、TBをクリックした後です。フォーカスを設定するために使用している方法は、ここで説明する方法と似ています。
ビューで、テキストボックスの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>
およびUserControlグリッド:
<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で設定され、Usercontrolがレンダリングされた後に設定されます。