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