我正在开发一个派生自Control的自定义控件,并使用ControlTemplate进行了定义。剔除所有花里胡哨后,控制显示只有四个文本框:如何防止使用控件模板创建的WPF自定义控件从围绕自身绘制焦点?
<Style TargetType="{x:Type local:MyControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:MyControl}">
<StackPanel Orientation="Horizontal">
<TextBox/>
<TextBox/>
<TextBox/>
<TextBox/>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
的问题是,控制能够接收键盘焦点和绘制焦点矩形围绕自身(文本框的不是一个,但在他们周围)。在浏览窗口中的控件时,这会添加一个不必要的制表位。
设置Focusible为false上的自定义控制(使用风格的setter)解决了这个问题,但这样的解决方案是远远不够完善,因为使用该控件的开发人员可以设置Focusible为true这会毁了制表位行为。
我可以对控件的GotKeyboardFocus事件作出响应,并在整个控件接收焦点时将焦点放在第一个TextBox上,但在Tab键后退时(使用Shift + Tab)时无法正常工作,第一个TextBox将在这种情况下,最后一个TextBox应该首先关注。
我怎样才能防止整个自定义控件接受键盘焦点,但允许子文本框作为制表符正常行事?
不得不尝试了'FocusVisualStyle'设置为'null'? – 2013-05-07 14:28:24
不幸的是,它不起作用,它只是在不改变行为的情况下隐藏选择矩形,用户必须按两次Tab才能到达第一个TextBox。 – RaceRalph 2013-05-07 15:45:22
也将'Focusable'设置为'false'。其他一些开发者将其设置为“真”是他们的问题。实际上,您应该重写'FocusableProperty'的元数据,使其默认为'false'来控制。 – 2013-05-07 15:59:37