8
ビューのボタンをクリックすると、キーボードフォーカスがTextBoxに設定されます。私はコードビハインドを使用したくないので、誰かが添付プロパティや同様のソリューションを書いていたのかどうか疑問に思っていますか?MVVMを使用してWPFのコントロールにフォーカスを設定する
ビューのボタンをクリックすると、キーボードフォーカスがTextBoxに設定されます。私はコードビハインドを使用したくないので、誰かが添付プロパティや同様のソリューションを書いていたのかどうか疑問に思っていますか?MVVMを使用してWPFのコントロールにフォーカスを設定する
これを試してみてください:
public static class FocusBehavior
{
public static readonly DependencyProperty ClickKeyboardFocusTargetProperty =
DependencyProperty.RegisterAttached("ClickKeyboardFocusTarget", typeof(IInputElement), typeof(FocusBehavior),
new PropertyMetadata(OnClickKeyboardFocusTargetChanged));
public static IInputElement GetClickKeyboardFocusTarget(DependencyObject obj)
{
return (IInputElement)obj.GetValue(ClickKeyboardFocusTargetProperty);
}
public static void SetClickKeyboardFocusTarget(DependencyObject obj, IInputElement value)
{
obj.SetValue(ClickKeyboardFocusTargetProperty, value);
}
private static void OnClickKeyboardFocusTargetChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
var button = sender as ButtonBase;
if (button == null)
return;
if (e.OldValue == null && e.NewValue != null)
button.Click += OnButtonClick;
else if (e.OldValue != null && e.NewValue == null)
button.Click -= OnButtonClick;
}
private static void OnButtonClick(object sender, RoutedEventArgs e)
{
var target = GetKeyboardClickFocusTarget((ButtonBase)sender);
Keyboard.Focus(target);
}
}
そして、それを使用する、
<TextBox x:Name="TargetTextBox"/>
<Button b:FocusBehavior.ClickKeyboardFocusTarget="{Binding ElementName=TargetTextBox}"/>
おかげで、それは与えられています、私は頭を開始! – devdigital
この例は正常に動作しています。ただし、以下の方法では少し変更があります。 'GetKeyboardClickFocusTarget'の代わりに' GetClickKeyboardFocusTarget'メソッドを呼び出さなければなりません:private static void OnButtonClick(object sender、RoutedEventArgs e){var target = GetKeyboardClickFocusTarget((ButtonBase)sender); Keyboard.Focus(target); } –