Hãy thử điều này:
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);
}
}
Sau đó, để sử dụng nó,
<TextBox x:Name="TargetTextBox"/>
<Button b:FocusBehavior.ClickKeyboardFocusTarget="{Binding ElementName=TargetTextBox}"/>
Nguồn
2011-01-14 20:23:49
Cảm ơn, đó là cho tôi một khởi đầu! – devdigital
Ví dụ này đang hoạt động tốt. Tuy nhiên, có sự thay đổi nhỏ trong phương pháp sau. Bạn phải gọi phương thức 'GetClickKeyboardFocusTarget' thay vì' GetKeyboardClickFocusTarget': private static void OnButtonClick (đối tượng người gửi, RoutedEventArgs e) {var target = GetKeyboardClickFocusTarget ((ButtonBase) người gửi); Keyboard.Focus (mục tiêu); } –