ビュー内に2つのビュー(ContainerControl内に含まれています)を含むビューがあります。 ビューの反対側には、Telerik GridViewがあり、ユーザーは行を選択できます。行が選択されると、ビューの反対側が別のビュー(およびViewModel)に動的に変更されます。動的なビューは、テキストボックスがたくさんある単純なグリッドなので、何も特別なものはありません。クリックするとコンテンツコントロール内のテキストボックスにフォーカスを設定するにはどうすればよいですか?
ユーザーは、動的に読み込まれたビューに値を入力したい場合は、最初にContentControl
をクリックしてから再度フォーカスを移動するTextBox
をクリックする必要があります。これは、GridViewの行がの編集モードにある場合にのみ発生します。
私はContentControlのFocusManager.IsFocusScope="False"
を設定しようとしました。
他のすべてのコントロールをIsFocusable=False
で設定しようとしました。
私はWPFイベントでこれを行う方法が必要であることは知っていますが、私はこの分野の専門家ではありません。
私は(それが関連性のそれを知らない)、このようCatelのコンバータを使用して、ダイナミックビューの設定です:
XAML:
<ContentControl Content="{Binding SelectedItemViewModel, Mode=TwoWay, Converter={catel:ViewModelToViewConverter}}" />
のViewModel:
public MyDataModel SelectedItem
{
get { return GetValue<MyDataModel>(SelectedItemProperty); }
set
{
SetValue(SelectedItemProperty, value);
RaisePropertyChanged(() => SelectedItemViewModel);
}
}
public static readonly PropertyData SelectedItemProperty = RegisterProperty("SelectedItem", typeof(MyDataModel));
public ViewModelBase SelectedItemViewModel
{
get
{
if (SelectedItem != null)
{
switch (SelectedItem.Type)
{
case 1:
return new OneViewModel(SelectedItem);
case 2:
return new TwoViewModel(SelectedItem);
}
}
return null;
}
}
ビューを動的にロードするために使用した戦略が不明なため、十分なデータなしでは答えられません。可能であれば、より理解しやすいように簡単なサンプルアプリケーションを作成できますか? – Gopichandar
'TextManager'に' FocusManager.FocusedElement = "{Binding RelativeSource = {RelativeSource Self}}" 'を試しましたか? – Gopichandar
GopichandarのFocusManagerを使用すると、現在選択されているテキストボックスが常に選択され、ユーザーがクリックしたテキストボックスにはなりません。 –