如何在WPF控件获得焦点时去除虚线框线

6
几天前,我们运行 WPF 应用程序时,一些开发人员的计算机上出现了很多控件在获得焦点时都有虚线边框,例如下图所示:
外部控件是 "Grid",在其他地方,"Border" 和其他控件也有同样的问题。
过去几天里,这个问题已经消失了。今天,我们团队的所有人都能看到这个问题。
我们尝试设置元素 "FocusVisualStyle="{x:Null}",但它根本没有效果,我们找不到哪些变化会影响它。
那么,这个问题是否与计算机环境有关?什么可能导致这个奇怪的问题?
更新:
我们刚刚在一个干净的虚拟机中尝试了我们的应用程序,发现它可以重现,所以可能这个问题的唯一点就是我们的代码。
由于我们还没有找到相关的代码导致这个问题,我们不知道上传哪些 XAML 代码来展示这个问题。

你有检查过 ShowGridLines 属性吗?在我们的 WPF 项目中我从未见过这样的东西。 - Bolu
我认为你应该在一个干净的示例中尝试重现问题。如果你能够重现它,给我们提供XAML代码,我们可以找出超出TabStop和焦点可视化之外的问题所在。 - Maverik
@Bolu 是的,我刚刚尝试了一下,但是没有成功... - user1031200
@Maverik 是的,我也希望能够给你所有的XAML或相关部分的代码,如果我们知道相关的内容,就可以找到问题的原因 :) - user1031200
@Bolu,你试过按Windows键吗?如果它获得了焦点,它周围会有虚线边框。顺便说一下,我使用的是Windows 7。所以可能是Windows设置的问题? - user1031200
不,我的电脑上没有出现这种情况(Win7也是如此),你可能是对的,可能是Windows设置的问题。 - Bolu
4个回答

14

由于 FocusVisualStyle 不支持从字符串转换,这两个选项对我都起作用:

<Grid FocusVisualStyle="{x:Null}" />

或者

<Grid>
    <Grid.FocusVisualStyle>
        <Style />
    </Grid.FocusVisualStyle>
</Grid>

2
我猜这对问题的提出者可能没有多大帮助,但是如果有其他人遇到了类似的问题... 我强烈怀疑设置 FocusVisualStyle="{x:Null}" 就是答案,但有时可能不明显应该在视觉树中的哪个控件上设置它。我建议使用 Snoop,检查应用程序,启用预览,扩展预览区域,在 snoop 中通过单击可视树然后重新选择应用程序中的问题区域来重现问题:

enter image description here

然后尝试通过单击值(在我的截图中为黄色)并删除来删除FocusVisualStyle。反复尝试,直到找到罪犯为止。视觉树可能不完全匹配逻辑树,但通过试错可以解决问题。
在我的例子中,我发现导致令人讨厌的虚线矩形的是ScrollViewer,而不是我最初认为的画布。
祝好,David

1

在这些控件上将IsTabStop设置为false应该解决此问题。


1
你应该将FocusVisualStyle属性设置为none。

2
问题中的操作状态为:“我们尝试将元素FocusVisualStyle =“{x:Null}”设置为null,但它根本没有任何效果。” - Bolu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接