2011-01-14 14 views

Antwort

5

Probieren Sie dies aus:

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

Dann, es zu benutzen,

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

Danke, dass Sie mir einen Vorsprung gegeben hat! – devdigital

+0

Dieses Beispiel funktioniert gut. Bei der folgenden Methode gibt es jedoch kleine Änderungen. Sie müssen die Methode 'GetClickKeyboardFocusTarget' anstelle von' GetKeyboardClickFocusTarget' aufrufen: private static void OnButtonClick (Objekt Absender, RoutedEventArgs e) {var Ziel = GetKeyboardClickFocusTarget ((ButtonBase) Absender); Keyboard.Focus (Ziel); } –