分页焦点无法与包含控件的控件模板一起使用

时间:2019-01-21 21:05:07

标签: wpf controltemplate

我已经尝试了各种模板绑定等方法来使其正常工作,但是如果我在控件上使用此样式,则内部文本框控件不会显示焦点。

之所以这样做,是因为我想设置一个错误模板,该模板围绕文本框和为显示单位保留的位置。

现在,在框中输入正确的内容将更新其中的文本。然后单击它会显示突出显示的边框和输入尖号,但不会跳入该边框。

<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>

1 个答案:

答案 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>