控制模板TextBox焦点

时间:2012-02-16 14:37:38

标签: wpf

道歉,如果这个问题的答案是完全明显的,但现在让我感到难过。为什么此示例中的文本框无法获得焦点?如果我使用没有控制模板的香草文本框,焦点就可以正常工作。

<StackPanel>
        <Label Name="lblChartTitle"
            Content="{x:Static res:Strings.ChartOptionsTitlesControlView_Label_Title}" />
            <TextBox Name="txtChartTitle" 
                     Text="{Binding Path=ChartTitle}" 
                     MaxLength="255"
                     KeyboardNavigation.TabIndex="1"
                     Template="{DynamicResource ctTextBox3DInset}"
                     />
        <Label Name="lblChartCategoryXAxis"
            Content="{x:Static res:Strings.ChartOptionsTitlesControlView_Label_CategoryXAxis}" />
            <TextBox Name="txtChartCategoryXAxis" 
                     Text="{Binding Path=CategoryXAxis}" 
                     MaxLength="255" 
                     KeyboardNavigation.TabIndex="2"
                     Template="{DynamicResource ctTextBox3DInset}"
                     />
        <Label Name="lblChartValueYAxis"
            Content="{x:Static res:Strings.ChartOptionsTitlesControlView_Label_ValueYAxis}" />
            <TextBox Name="txtChartValueYAxis" 
                     Text="{Binding Path=ValueYAxis}" 
                     MaxLength="255"
                     KeyboardNavigation.TabIndex="3"
                     Template="{DynamicResource ctTextBox3DInset}"
                     />
    </StackPanel>

<ControlTemplate x:Key="ctTextBox3DInset" TargetType="TextBox">
            <Border 
                Style="{StaticResource BorderStyle3DInsetBlack}"
                Margin="0,0,0,5">
                <Border Style="{StaticResource BorderStyle3DInsetWhite}">
                    <Border Style="{StaticResource BorderStyle3DInset}">
                        <TextBox
                            TabIndex="{TemplateBinding TabIndex}"
                            BorderThickness="0"/>
                    </Border>
                </Border>
            </Border>
        </ControlTemplate>

1 个答案:

答案 0 :(得分:1)

<击> 因为当您应用ControlTemplate时,实际上是在创建另一个TextBox。因此焦点不会设置为ControlTemplate中的TextBox。

编辑:

您需要使用的是<ContentPresenter/>

<ContentPresenter/>

而不是使用

创建TextBox
<TextBox  TabIndex="{TemplateBinding TabIndex}" 
                        BorderThickness="0"/> 

<击> 编辑2:我认为我以前的答案是错误的,TextBox的工作方式不同。 您必须对TextBox使用<ScrollViewer Margin="0" x:Name="PART_ContentHost"/>,PART_ContentHost是将元素指定为内容主机的特殊名称。并且必须与ScrollViewer或AdornerDecorator一起使用。

以下是reference