2011-05-12 48 views

回答

11

我用這個方法成功

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

謝謝!工作得很好。 還有一種方法可以將文本框與這些綁定放在一起嗎? (無需專注另一個文本框) – sust86 2013-11-27 08:05:53

+0

解決了我的問題。我在我的TextBox的isEnabled上使用綁定。禁用+啓用將取消對焦文本框。看起來像一個黑客,但沒有發現其他方式:/ – sust86 2013-11-27 09:02:17

相關問題