2016-03-01 6 views
1

Я делаю wpf-форму (перемещен из winform пару дней назад), и я хотел настроить текстовое поле. Я получил текстовое поле, чтобы вести себя так, как я его хочу, но теперь я не могу дать ему ввод, и он не реагирует вообще, когда я нажимаю на него. Я думаю, что я сломал его, так или иначе, вот мой код:Я сломал текстовое поле

<TextBox x:Name="textBox" HorizontalAlignment="Left" Height="23" Margin="10,48,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="120" Foreground="White"> 
     <TextBox.Style> 
      <Style TargetType="{x:Type TextBox}"> 
       <Setter Property="BorderBrush" Value="#FF497AB4"/> 
       <Setter Property="Background" Value="#FF2E2E2E"/> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type TextBox}"> 
          <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"/> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
       <Style.Triggers> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="BorderBrush" Value="OrangeRed"/> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </TextBox.Style> 
    </TextBox> 

Так что же я делаю неправильно? Благодаря!

+0

Я думаю, что проблема исходит от шаблона сеттера, получая проект вверх для тестирования, что :) – Sidewinder94

+0

Убедитесь, что MSDN статья из: https: //msdn.microsoft.com/en-us/library/ms752068(v=vs.110).aspx Я думаю, что вы забыли некоторые вещи в своем «ControlTemplate», который, кстати, раздел вашего стиля делает невозможным взаимодействие с текстовым полем – Sidewinder94

ответ

1

Попробуйте добавить ScrollViewer в шаблон, как это:

<Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"> 
    <ScrollViewer Margin="0" x:Name="PART_ContentHost"/> 
</Border> 

У вас есть несколько примеров шаблонов here

Проблема заключалась в том, что шаблон не имеет ContentHost, так что это будет не отображать содержимое. Чтобы добавить ContentHost, вы должны добавить элемент с именем «PART_ContentHost» как объяснен here

+0

Хорошо, это сработало! Спасибо –

+0

Wow, теперь я хотел бы знать, почему добавление scrollviewer на границе сделало текстовое поле работать oO (у меня есть подозрение, но я бы хотел быть уверен) – Sidewinder94

+1

@ Sidewinder94 см. [This] (https: // msdn .microsoft.com/en-us/library/ms753930 (v = vs.85) .aspx) – Pikoh

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