2011-05-12 10 views

Respuesta

11

He utilizado este método con éxito

http://caliburnmicro.codeplex.com/discussions/222892?ProjectName=caliburnmicro

public class FocusBehavior : Behavior<Control> 
    { 

     protected override void OnAttached() 
     { 
      AssociatedObject.GotFocus += (sender, args) => IsFocused = true; 
      AssociatedObject.LostFocus += (sender, a) => IsFocused = false; 
      AssociatedObject.Loaded += (o, a) => { if (HasInitialFocus || IsFocused) AssociatedObject.Focus(); }; 

      base.OnAttached(); 
     } 

     public static readonly DependencyProperty IsFocusedProperty = 
      DependencyProperty.Register(
       "IsFocused", 
       typeof(bool), 
       typeof(FocusBehavior), 
       new PropertyMetadata(false, (d, e) => { if ((bool)e.NewValue) ((FocusBehavior)d).AssociatedObject.Focus(); })); 

     public bool IsFocused 
     { 
      get { return (bool)GetValue(IsFocusedProperty); } 
      set { SetValue(IsFocusedProperty, value); } 
     } 

     public static readonly DependencyProperty HasInitialFocusProperty = 
      DependencyProperty.Register(
       "HasInitialFocus", 
       typeof(bool), 
       typeof(FocusBehavior), 
       new PropertyMetadata(false, null)); 

     public bool HasInitialFocus 
     { 
      get { return (bool)GetValue(HasInitialFocusProperty); } 
      set { SetValue(HasInitialFocusProperty, value); } 
     } 
    } 


<TextBox x:Name="UserName" Style="{StaticResource LoginTextBox}"> 
    <i:Interaction.Behaviors> 
    <localBehaviors:FocusBehavior HasInitialFocus="True" 
     IsFocused="{Binding UserNameIsFocused, Mode=TwoWay}"/> 
    </i:Interaction.Behaviors> 
</TextBox> 
+0

Gracias! Funciona muy bien ¿Hay alguna manera de desenfocar un cuadro de texto con estas vinculaciones? (sin tener que enfocar otro cuadro de texto) – sust86

+0

Ha solucionado mi problema. Estoy usando un enlace en isEnabled de mi TextBox. Disable + Enable desenfocará el cuadro de texto. Parece un truco pero no encontró otra forma: / – sust86

Cuestiones relacionadas