我已经尝试了各种模板绑定等方法来使其正常工作,但是如果我在控件上使用此样式,则内部文本框控件不会显示焦点。
之所以这样做,是因为我想设置一个错误模板,该模板围绕文本框和为显示单位保留的位置。
现在,在框中输入正确的内容将更新其中的文本。然后单击它会显示突出显示的边框和输入尖号,但不会跳入该边框。
<Style x:Key="Special" TargetType="{x:Type TextBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBox}">
<DockPanel
LastChildFill="True"
Visibility="Visible">
<Border
Name="PART_UnitContainer"
DockPanel.Dock="Right"
Visibility="Collapsed">
<Label
Content="ft"
Style="{DynamicResource UnitLabel}"
/>
</Border>
<TextBox Name="PART_Control" Text="{Binding Text, RelativeSource={RelativeSource TemplatedParent}}"/>
</DockPanel>
<ControlTemplate.Triggers>
<Trigger Property="IsFocused" Value="True">
<Setter TargetName="PART_UnitContainer" Property="Visibility" Value="Visible"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
答案 0 :(得分:0)
最初,我将整个控件设置为没有制表位,而内部设置有制表位,但是显然您还必须设置制表符导航才能继续。尝试玩导航时没有,所以我忽略了此设置。
<Style x:Key="Special" TargetType="{x:Type TextBox}">
<Setter Property="KeyboardNavigation.TabNavigation" Value="Continue"/>
<Setter Property="IsTabStop" Value="False"/>
<Setter Property="Template">
<ControlTemplate>
...
<Text IsTabStop="True" Name="PART_Control" ...
...
</ControlTemplate>
</Setter>
</Style>
但是,此小技巧无法将shift-tab移出可编辑的组合框。如果知道了,我将更新答案。
对于组合框,您必须执行不同的操作。您没有将TabNavigation设置为Continue,也没有将内部组合框中的IsTabStop设置为true。
请参见
<Style x:Key="Special" TargetType="{x:Type ComboBox}">
<Setter Property="IsTabStop" Value="False"/>
<Setter Property="Template">
<ControlTemplate>
...
<ComboBox Name="PART_Control" ...
...
</ControlTemplate>
</Setter>
</Style>