我有像这样的
聚焦元素messagetextbox<DockPanel FocusManager.FocusedElement="{Binding ElementName=TextBox1}">
<TextBox Name="TextBox1" Text="{Binding Message}"/>
<TextBox Name="TextBox2" Text="{Binding Message}"/>
<TextBox Name="TextBox3" Text="{Binding Message}"/>
</DockPanel>
但后来我想使用代码动态地使用elementname更改焦点到“TextBox2”。那怎么做呢。假设我有像这样的View Model
private string elementToFocus;
public string ElementToFocus
{
set{
this.elementToFocus=value;
OnPropertyChanged("ElementToFocus");
}
get{
return this.elementToFocus;
}
}
Anda我想要这种代码,但我怎么做呢?
<DockPanel FocusManager.FocusedElement="{Binding ElementName={Binding ElementToFocus}}">
因为我有很多控制权,有时会以编程方式移动焦点。感谢
答案 0 :(得分:0)
由于设置Focus是View相关的东西,我个人更喜欢使用Messager类(由GalaSoft-Mvvmlight提供),以及如何:
1.register you查看以从ViewModel接收消息并设置这些消息的处理程序(在View的构造函数内):
Messenger.Default.Register<NotificationMessage>(this, (message) =>
{
switch (message.Notification)
{
case "TextBox1":
TextBox1.Focus();
break;
case "TextBox2":
TextBox2.Focus();
break;
case "TextBox3":
TextBox3.Focus();
break;
}
});
2.当您想要更改焦点时,只需从包含控件名称的VM发送一条消息,将焦点设置为:
Messenger.Default.Send(new NotificationMessage("TextBox1"))