12
這個問題已被問了幾次,不幸的是答案只適用於WPF。任何人都知道如何在Silverlight中實現這一點?基本上我需要關注代碼中的某個文本框。如何使用MVVM將文本框集中在WP7中?
這個問題已被問了幾次,不幸的是答案只適用於WPF。任何人都知道如何在Silverlight中實現這一點?基本上我需要關注代碼中的某個文本框。如何使用MVVM將文本框集中在WP7中?
我用這個方法成功
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>
謝謝!工作得很好。 還有一種方法可以將文本框與這些綁定放在一起嗎? (無需專注另一個文本框) – sust86 2013-11-27 08:05:53
解決了我的問題。我在我的TextBox的isEnabled上使用綁定。禁用+啓用將取消對焦文本框。看起來像一個黑客,但沒有發現其他方式:/ – sust86 2013-11-27 09:02:17