2012-02-16 2 views
1

Извините, если ответ на этот вопрос полностью очевиден, но в данный момент он меня озадачил. Почему текстовые поля в этом примере не будут получать фокус? Если я использую текстовые поля ванили без шаблона управления, фокус работает отлично.Шаблон управления TextBox Фокус

<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

Потому что, когда вы применяете ControlTemplate, вы на самом деле создает еще один TextBox .. Так что фокус не установлен на TextBox в вашем ControlTemplate.

Edit:

Что вам нужно использовать на самом деле <ContentPresenter/>:

<ContentPresenter/> 

вместо создания TextBox с помощью

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

Edit 2: Я думаю, что мой предыдущий ответ был Неправильно, TextBox работает по-другому. Вы должны использовать <ScrollViewer Margin="0" x:Name="PART_ContentHost"/> для TextBox, PART_ContentHost - это специальное имя для назначения элемента в качестве хоста содержимого. И должен использоваться с ScrollViewer или AdornerDecorator.

Вот reference

+0

Спасибо за ваш ответ. Я использую .NET 3.5, и я не могу найти ControlPresenter. Вы имеете в виду ContentPresenter? – dior001

+0

Woops, извините за мою опечатку. Да, я имею в виду. –

Смежные вопросы