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吗?

4

2 回答 2

7

如果您足够努力,XAML 中总会有办法。:) 您需要的是TriggerBlend 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 中做各种疯狂的事情。我会说我很惊讶这种东西不是内置的。

于 2011-10-25T02:22:44.967 回答
1

据我所知,不,XAML 中没有办法设置元素的焦点。您将不得不求助于您所引用的东西。我认为附加的行为(类似于FocusManager)将是最好的途径。

于 2011-02-09T01:34:48.237 回答