2011-01-14 27 views

Trả lời

5

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}"/> 
+0

Cảm ơn, đó là cho tôi một khởi đầu! – devdigital

+0

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); } –

Các vấn đề liên quan