有一个页面上有几个可聚焦元素(按钮,图像,...)在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)
类似的样式触发器也可以应用于其他可聚焦和可选择的元素.
编辑:
我认为你只需要改变 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 添加它仍然比代码隐藏更实用。