在Silverlight 4中,如何在XAML中将焦点设置到UI元素(例如TextBox)?

3
我只看到过代码解决方案,我正在寻找基于XAML的解决方案,我很惊讶居然不能在XAML中设置UI元素的焦点。我发现了这篇旧的MSDN文章:http://social.msdn.microsoft.com/Forums/en/wpf/thread/09dc837d-4485-4966-b45b-266727bbb90c,里面有我所需要的解决方案(我猜这只适用于WPF)。
<Grid FocusManager.FocusedElement="{Binding ElementName=listBox1}">

在Silverlight 4 XAML中,设置TextBox/ListBox的焦点不可能吗?
2个回答

7

如果你足够努力,XAML总有一种方式可以实现。 :) 你需要的是来自Blend SDK的一个触发器

public class FocusTrigger : TargetedTriggerAction<Control>
{
   protected override void Invoke(object parameter)
   {
      if (Target == null)
         return;

      Target.Focus();
   }
}

然后使用它的方式类似于:
<Button Content="Move focus">
  <i:Interaction.Triggers>
    <i:EventTrigger EventName="Click">
      <local:FocusTrigger TargetName="TheTextBox"/>
    </i:EventTrigger>
  </i:Interaction.Triggers>
</Button>
<TextBox x:Name="TheTextBox"/>

如果你想变得非常花哨,你可以对触发器应用条件并在XAML中做各种疯狂的事情。我会说我很惊讶这种东西居然没有内置。

1
据我所知,在XAML中没有一种方法可以设置元素的焦点。您将不得不采取类似于您引用的方式。我认为一个附加的行为(类似于FocusManager)是最好的路线。

谢谢确认,我还没有找到在XAML中实现这个的方法,所以我将不得不采用其他方式。 - RyBolt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接