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

时间:2015-02-19 14:39:04

标签: wpf xaml textbox controltemplate keyboard-navigation

我为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时做的第一个。

感谢您的时间!

1 个答案:

答案 0 :(得分:0)

HA!在解决另一个控件上的问题时想出来。

问题是我每次使用模板时都有2个TextBox。

一个简单的地图将是:

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

所以我只需要让我放在窗口中的控件有K​​eyboardNavigation.IsTabStop =&#34; false&#34;所以它会传递那个文本框并转到我的ControlTemplate中的文本框。