2011-01-14 12 views

Odpowiedz

5

Spróbuj tego:

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

Potem go używać,

<TextBox x:Name="TargetTextBox"/> 
<Button b:FocusBehavior.ClickKeyboardFocusTarget="{Binding ElementName=TargetTextBox}"/> 
+0

Dzięki, że się dał mi przewagę! – devdigital

+0

Ten przykład działa poprawnie. Jednak w poniższej metodzie jest niewielka zmiana. Musisz wywołać metodę 'GetClickKeyboardFocusTarget' zamiast' GetKeyboardClickFocusTarget': private static void OnButtonClick (object sender, RoutedEventArgs e) {var target = GetKeyboardClickFocusTarget ((ButtonBase) sender); Keyboard.Focus (cel); } –

Powiązane problemy