为什么我必须按tab键两次才能使用此控件模板进入文本框



我为一个TextBox创建了一个ControlTemplate,其中包括一个标签。然而,当我尝试使用Tab键导航控件时,我必须按两次Tab键才能进入文本框字段,就好像它在关注里面的另一个元素一样。我试着扰乱标签的可聚焦性,但这似乎不是问题所在。这是代码:

<ControlTemplate x:Key="custTextbox" TargetType="{x:Type TextBox}">
    <Canvas x:Name="customTextbox">
        <Border CornerRadius="3, 0, 0 ,3"  BorderThickness="1, 1, 0, 1" 
                Height="30" x:Name="brdTextboxLabel" Width="98">
            <Border.BorderBrush>
                <LinearGradientBrush StartPoint=".5,0" EndPoint=".5,1">
                    <GradientStop Color="#3C3F48" Offset=".88"/>
                    <GradientStop Color="#9CA1A8" Offset=".96"/>
                </LinearGradientBrush>
            </Border.BorderBrush>
            <Border.Background>
                <LinearGradientBrush StartPoint=".5, 0" EndPoint=".5, 1">
                    <GradientStop Color="#414447" Offset="0"/>
                    <GradientStop Color="#4E525B" Offset=".08"/>
                </LinearGradientBrush>
            </Border.Background>
            <Canvas>
                <Rectangle Height="24" x:Name="rectangle3" Stroke="#636369" 
                           Width="1" Canvas.Left="96" Canvas.Top="2" />
                <Label Canvas.Left="0" Padding="9,6.5,0,0" Foreground="#BABBBF" 
                       FontWeight="Bold" Canvas.Top="0" FontSize="11" 
                       Content="{TemplateBinding Tag}" Height="28" 
                       x:Name="lblTextboxHeader" Width="92" />
            </Canvas>
        </Border>
        <!-- ========================================= -->
        <Border CornerRadius="0,3,3,0" BorderThickness="0,1,1,1" Canvas.Left="98" 
                Height="30" x:Name="brdTextbox" Width="348">
            <Border.BorderBrush>
                <LinearGradientBrush StartPoint=".5,0" EndPoint=".5,1">
                    <GradientStop Color="#3C3F48" Offset=".88"/>
                    <GradientStop Color="#9CA1A8" Offset=".96"/>
                </LinearGradientBrush>
            </Border.BorderBrush>
            <Border.Background>
                <LinearGradientBrush StartPoint=".5, 0" EndPoint=".5, 1">
                    <GradientStop Color="#414447" Offset="0"/>
                    <GradientStop Color="#4E525B" Offset=".08"/>
                </LinearGradientBrush>
            </Border.Background>
            <Canvas>
                <TextBox TabIndex="0" Background="Transparent" CaretBrush="#8C8CA1"
                         FontSize="16" Padding="4, 3, 0 ,0" BorderBrush="Transparent" 
                         Foreground="#D4D5DA" Canvas.Left="0" Canvas.Top="-1" 
                         Height="30" x:Name="textBox1" Width="347"/>
            </Canvas>
        </Border>
    </Canvas>
</ControlTemplate>

很抱歉,如果这是一个混乱的ControlTemplate,这是我在启动wpf/xaml时做的第一个。

感谢您抽出时间!

HA!在解决另一个控件上的问题时发现了这个问题。

问题是,基本上,每次使用模板时,我都有2个文本框。

一个简单的地图是:

<TextBox>
    <ControlTemplate>
        <Label/>
        <Textbox/>
    </ControlTemplate>
</TextBox>

所以我只需要让我放在窗口中的控件有KeyboardNavigation.IsTabStop="false",所以它会传递那个文本框,然后转到我的ControlTemplate中的那个。

最新更新