如何在Silverlight中设置焦点

时间:2014-10-20 20:03:12

标签: silverlight mvvm setfocus

我有一个带有多个文本框的用户控件的Silverlight应用程序。我正在使用MVVM模式。

当我单击Add按钮时,ViewModel会执行一些逻辑。添加命令逻辑完成后,我希望每次单击后将SetFocus设置为txtName文本框。

如何使用Silverlight UserControl和MVVM执行此操作?

1 个答案:

答案 0 :(得分:2)

当然没有" IsFocused"属性,但至少有两种MVVM友好的方法可以使用:

  1. 使用Blend SDK中的触发器/操作扩展集。具体来说,在按钮上使用EventTrigger"点击"事件,然后使用CallMethodAction来调用" SetFocus"在目标元素上。
  2. 使用Behavior和附加属性来调用" Focus"在目标上。

  3. 首先,你需要这样的东西:

    <Button Content="Add"
            xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
            xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="Click">
                <i:InvokeCommandAction Command="{Binding AddCommand}" />
                <ei:CallMethodAction TargetObject="{Binding ElementName=NameOfElementToFocus}"
                                     MethodName="Focus" />
            </i:EventTrigger>
        </i:Interaction.Triggers>
    </Button>
    
    <TextBox x:Name="NameOfElementToFocus" />
    

    (或者,您也可以使用简单的"focus"操作,而不是使用CallMethodAction


    我不会发布第二种方法的任何代码 - 这是一个很常见的用例,您可以通过搜索(for example)找到示例。基本思想是创建一个Behavior类,并添加一个布尔附加属性&#34; IsFocused&#34; - 在其改变&#34;处理程序,然后调用&#34; Focus&#34;在AttachedObject上。然后,您可以将属性MVVM样式绑定到视图模型中的属性,如下所示:

    <TextBox x:Name="NameOfElementToFocus" my:FocusBehavior.IsFocused="{Binding IsTextBoxFocused}" />