如何以编程方式选择聚焦元素?

Wat*_*lla 14 c# wpf

有一个页面上有几个可聚焦元素(按钮,图像,...)在XAML中静态生成,一些动态地在代码后面生成.在此页面上,按Tab键将逐个聚焦元素.这意味着在当前元素周围显示虚线.现在,我想要选出当前的焦点元素.这意味着也要在它周围显示蓝线.因此,当重点移动时,所选择的移动也是如此

我怎么能在C#代码隐藏中做到这一点?

在此输入图像描述

Row*_*ear 10

我想说最好的方法可能会有所不同,具体取决于你有哪些可聚焦元素?如果你想为listboxitem做这个,你可以只用xaml这样做:

<UserControl.Resources>
    <Style TargetType="ListBoxItem">
        <Style.Triggers>
            <Trigger Property="IsFocused" Value="True">
                <Setter Property="Selector.IsSelected" Value="True"></Setter>
            </Trigger>
        </Style.Triggers>
    </Style>
</UserControl.Resources>
<ListBox>
    <ListBoxItem>
        Blah
    </ListBoxItem>
</ListBox>
Run Code Online (Sandbox Code Playgroud)

类似的样式触发器也可以应用于其他可聚焦和可选择的元素.


tgp*_*dyk 4

编辑:

我认为你只需要改变 TabStop 上的虚线。该虚线表示选定状态。所以,它已经被选择了。这个“选择焦点元素”语句没有任何意义,因为如果您指的是 TabStop,它确实已经被选中。您可以通过按 Tab 键然后按带有虚线的那个来测试它,如果它是一个按钮并按 Enter 键,它将执行 Click 事件(如果其后面有处理程序)。

你需要的是这个

如果您想在代码隐藏中执行此操作,请将其添加到 XAML 的资源中。

<Style x:Key="MyFocusVisual">
      <Setter Property="Control.Template">
          <Setter.Value>
              <ControlTemplate>
                   <Rectangle Margin="-2" StrokeThickness="1" Stroke="Blue" />
                </ControlTemplate>
            </Setter.Value>
        </Setter>
</Style>
....
 myButton.FocusVisualStyle = (Style)FindResource("MyFocusVisual");
Run Code Online (Sandbox Code Playgroud)

如果您无权访问 XAML,我认为您可以了解如何在代码隐藏中添加样式并将样式添加到按钮。现在,我显然在这里自相矛盾,因为您的目标是代码隐藏,所以不可能无法访问 XAML,对吧?通过 XAML 添加它仍然比代码隐藏更实用。