如何防止自定义控件的元素获取焦点?

7

我写了一个小型的WPF控件 - 一个文本框,显示小的(i)图标,允许显示弹出式帮助。控件模板的相关部分如下:

<DockPanel>
    <local:InfoIcon DockPanel.Dock="Right" Margin="2" VerticalAlignment="Center" HelpContent="{TemplateBinding InfoTooltip}" 
                    Focusable="False" IsTabStop="False"/>
    <ScrollViewer x:Name="PART_ContentHost" Margin="2" VerticalAlignment="Center"/>
</DockPanel>
InfoIconIsTabStopFocusable属性都已经显式设置为false。但是,这并不能阻止该控件在通过控件时获得焦点:

Stolen focus

我如何防止CustomControl中的这部分获得焦点?

1
您的 InfoIcon 控件包含子元素 (您提到的文本框?),这些子元素仍然可以获取焦点。要么将这些元素的 Focusable 显式设置为 false,要么将它们的 Focusable 属性绑定到 InfoIcon.Focusable 属性... (同样适用于 IsTabStop) - user2819245
@Bolu 这甚至更好,它实际上影响子项。 - Spook
1
@elgonzo 嗯,那是个好观点。不过似乎 KeyboardNavigation.TabNavigation 以我想要的方式解决了这个问题。 - Spook
@Spook 是的,这就是重点,如果你有多个子项。 - Bolu
用户控件本身具有焦点矩形,并且可以进行标签化,因此设置“IsTabStop”和“Focusable”仅影响用户控件的“IsTabStop”和“Focusable”行为,而不影响任何子对象的属性。 - Rachel
显示剩余4条评论
1个回答

5
尝试在 DockPanelInfoIcon 本身中设置KeyboardNavigation.TabNavigation="None"

最后你把它放在哪个“控件”上了? - weston

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