每当我尝试以编程方式移动焦点时,焦点视觉(虚线矩形)都不会显示。
可以采取哪些措施强制显示此视觉效果?
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" Loaded="OnLoaded">
<StackPanel>
<TextBlock x:Name="a" Focusable="True">A</TextBlock>
<TextBlock Focusable="True">B</TextBlock>
<Button Focusable="False" Click="OnClick">Move Focus</Button>
</StackPanel>
</Window>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void OnLoaded(object sender, RoutedEventArgs e)
{
Keyboard.Focus(a);
}
private void OnClick(object sender, RoutedEventArgs e)
{
var request = new TraversalRequest(FocusNavigationDirection.Next);
var elementWithFocus = Keyboard.FocusedElement as UIElement;
if (elementWithFocus != null)
elementWithFocus.MoveFocus(request);
}
}
答案 0 :(得分:4)
如果你在KeyboardNavigation的ShowFocusVisual中查看(在reflector / ilspy中),你会发现只有最后一个输入来自键盘时框架才会显示它(或者如果基于KeyboardCues系统参数信息的内部静态属性是真正)。所以我认为有一个很好的方法可以做到这一点,不能使用反射临时设置该属性或异步聚焦元素并强制执行键盘操作(可能使用winforms SendKeys或keybd_event api)但我不建议