を介してテキストボックスの焦点を設定します。 WPFビューのボタンでクリックしたら、エラーメッセージを表示し、特定のテキストボックスコントロールにフォーカスを転送する必要がある場合があります。ただし、ViewModelで次のコードを実行すると、必要なテキストボックスにカーソルを設定できません。
この問題の理由は、UI要素をViewModelで直接引用することです。これは一般的な慣行です。この問題を解決するには、他のテクノロジーを使用する必要があります。
<code class="language-csharp">if (companyref == null) { var cs = new Lipper.Nelson.AdminClient.Main.Views.ContactPanels.CompanyAssociation(); MessageBox.Show("Company does not exist.", "Error", MessageBoxButton.OK, MessageBoxImage.Exclamation); cs.txtCompanyID.Focusable = true; System.Windows.Input.Keyboard.Focus(cs.txtCompanyID); }</code>
1つの方法は、任意のuieLementに適用できる追加の属性を作成し、「ISFOCUSED」などのViewModel属性に結合することです。この属性の値が変更されると、要素の焦点を設定して、ビューモデルの状態にバインドできるようにします。この追加属性の実装を以下に示すことができます:
次に、XAMLのViewModelにバインドできる属性を使用して、プログラミングを通じてフォーカスを設定できます。.NETソースコードを使用してデバッグ
public static class FocusExtension
{
public static bool GetIsFocused(DependencyObject obj)
{
return (bool)obj.GetValue(IsFocusedProperty);
}
public static void SetIsFocused(DependencyObject obj, bool value)
{
obj.SetValue(IsFocusedProperty, value);
}
public static readonly DependencyProperty IsFocusedProperty =
DependencyProperty.RegisterAttached(
"IsFocused", typeof(bool), typeof(FocusExtension),
new UIPropertyMetadata(false, OnIsFocusedPropertyChanged));
private static void OnIsFocusedPropertyChanged(
DependencyObject d,
DependencyPropertyChangedEventArgs e)
{
var uie = (UIElement)d;
if ((bool)e.NewValue)
{
uie.Focus(); // 忽略 false 值。
}
}
}
複雑なフォーカスの問題については、.NETソースコードを使用してデバッグして、焦点を処理するフレームワークがどのように役立つかを理解します。これは貴重な洞察を提供し、問題を見つけるのに役立ちます。 代替
ViewModelからTextBoxの焦点を設定する別の方法は、コマンドを使用して動作を実行することです。この動作は、ビューまたはViewModelに実装でき、ボタンにバインドしてクリックすることができます。次に、動作を設定して、必要なテキストボックスにフォーカスを設定できます。
以上がViewModelからWPFのテキストボックスにプログラムでフォーカスを設定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。