当您编写自己的控件并在其控件模板中包含控件时,管理焦点的正确方法是什么?
假设我们有一个CustomControl,它的ControlTemplate 中有两个TextBox。作为用户和开发人员,我期望以下行为:
调用 customControl.Focus() 时,模板中的第一个 TextBox 应获得焦点。
使用 Tab / Shift+Tab 向前和向后移动焦点预计会起作用,这意味着:
2.1 如果用户在customControl 之前按下具有焦点的Tab 键,那么焦点应该移动到customControl 的第一个文本框。
2.2 如果用户在自定义控件的第一个文本框中按下 Shift+Tab 并获得焦点,则焦点应该移动到 customControl 之前的任何控件。
以下我已经尝试过:
一个。将 CustomControl 设置为 Focusable=false 启用条件 2。但禁用条件 1。
湾。在 StackOverflow 上,如何将焦点移动到控件模板内的控件的问题多次出现。总是提出以下解决方案:
<Trigger Property="IsFocused" Value="True">
<Setter TargetName="PART_TextBox1" Property="FocusManager.FocusedElement" Value="{Binding ElementName=PART_TextBox1}" />
</Trigger>
此解决方案启用条件 1 和 2.1,但破坏条件 2.2。
谢谢你的帮助 :)