集中programically导航焦点时视觉不显示(focus visual not showing

2019-07-18 03:21发布

每当我试图以编程方式将焦点移动可视聚焦(虚线矩形)不显示。

什么可以做,以迫使这种视觉显示?

<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);
    }
}

Answer 1:

如果您在KeyboardNavigation的ShowFocusVisual看(在反射/ ilspy),你会发现,这个框架将只显示它如果最后的输入是从键盘(或如果基于KeyboardCues系统参数信息的内部静态属性为true)。 因此,我不认为有这样做短期使用反射的一个很好的方式,暂时设置该属性或异步聚焦元素,并迫使键盘动作(也许使用的WinForms的SendKeys或keybd_event API),但我不会推荐任何。



文章来源: focus visual not showing when navigating focus programically