2013-12-21 2 views
0

У меня этот стиль текстовых полей. когда я использую его и пытаюсь выполнить цикл через мой контент, используя текстовые поля Tab, используя этот стиль, получает фокус после нажатия кнопки Tab два раза. Однако в первой вкладке Tab активируется анимация состояния «Focused», но кат нет. Я снова нажимаю табуляцию, и появляется каретка.Контекстная вкладка в текстовом поле WPF.

<Style x:Key="MPTextBox" TargetType="{x:Type TextBox}"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type TextBox}"> 
         <Border x:Name="border" BorderBrush="#FFEF7B54" BorderThickness="2" Background="White" CornerRadius="5"> 
          <VisualStateManager.VisualStateGroups> 
           <VisualStateGroup x:Name="CommonStates"> 
            <VisualState x:Name="Normal"/> 
            <VisualState x:Name="Disabled"/> 
            <VisualState x:Name="ReadOnly"/> 
            <VisualState x:Name="MouseOver"> 
             <Storyboard> 
              <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="border"> 
               <EasingColorKeyFrame KeyTime="0:0:0.5" Value="#FF57C0AF"/> 
              </ColorAnimationUsingKeyFrames> 
             </Storyboard> 
            </VisualState> 
           </VisualStateGroup> 
           <VisualStateGroup x:Name="FocusStates"> 
            <VisualState x:Name="Unfocused"/> 
            <VisualState x:Name="Focused"> 
             <Storyboard> 
              <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" Storyboard.TargetName="border"> 
               <EasingColorKeyFrame KeyTime="0" Value="#FFED4B15"/> 
              </ColorAnimationUsingKeyFrames> 
             </Storyboard> 
            </VisualState> 
           </VisualStateGroup> 
          </VisualStateManager.VisualStateGroups> 
          <TextBox Background="{x:Null}" BorderBrush="{x:Null}" CaretBrush="#FFF05A29" BorderThickness="0" Margin="5,5,5,0" FontFamily="Public Enemy NF" FontSize="16" Foreground="#FFF05A29" HorizontalAlignment="Stretch" d:LayoutOverrides="Width, Height" VerticalAlignment="Stretch" Text="{Binding Text, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"/> 
         </Border> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 

Я хочу, чтобы все это происходило только на одном ударе с тангажа.

Другое дело в этом текстовом поле заключается в том, что если я пытаюсь получить доступ к свойству Text в обработчике события, например, событии KeyDown, он отображает нуль, а текст внутри элемента управления никогда не устанавливается до тех пор, пока текстовое поле не потеряет фокус.

ответ

0

проблема здесь Текстовое поле присутствует внутри шаблона управления.

  1. Если у вас есть событие для TextBox в шаблоне управления вы можете узнать текст захватывается текстового поля шаблона управления и только на LostFocus, он устанавливает в outerTextBox (где применяется стиль) .Если вы хотите для каждый символ текста, который будет обновляться во внешнем тексте, затем укажите код UpdateSourceTrigger = PropertyChanged в элементе управления в текстовом поле шаблона. По умолчанию только при потерянном фокусе, значение в контрольном текстовом поле Шаблона обновляется во внешнем TextBox (где применяется стиль).

  2. Что касается двойного фокуса, это из-за границы, а затем текстового поля.

Но ниже правильный способ определить ControlTemplate для TextBox так определить caretBrush, Border кисть в инкубаторе ниже

<Style x:Key="MPTextBox" TargetType="{x:Type TextBox}"> 

     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type TextBox}"> 
        <Microsoft_Windows_Themes:ClassicBorderDecorator x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" BorderStyle="Sunken" Background="{TemplateBinding Background}"> 
         <VisualStateManager.VisualStateGroups> 
          <VisualStateGroup x:Name="CommonStates"> 
           <VisualState x:Name="Normal"/> 
           <VisualState x:Name="Disabled"/> 
           <VisualState x:Name="ReadOnly"/> 
           <VisualState x:Name="MouseOver"> 
            <Storyboard> 
             <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="border"> 
              <EasingColorKeyFrame KeyTime="0:0:0.5" Value="#FF57C0AF"/> 
             </ColorAnimationUsingKeyFrames> 
            </Storyboard> 
           </VisualState> 
          </VisualStateGroup> 
          <VisualStateGroup x:Name="FocusStates"> 
           <VisualState x:Name="Unfocused"/> 
           <VisualState x:Name="Focused"> 
            <Storyboard> 
             <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" Storyboard.TargetName="border"> 
              <EasingColorKeyFrame KeyTime="0" Value="#FFED4B15"/> 
             </ColorAnimationUsingKeyFrames> 
            </Storyboard> 
           </VisualState> 
          </VisualStateGroup> 
         </VisualStateManager.VisualStateGroups> 
         <ScrollViewer x:Name="border" FontWeight="Bold"> 
          <ScrollViewer.Background> 
           <!-- Button: common to all buttons --> 
           <SolidColorBrush Color="{DynamicResource VeryLightGray}"/> 
          </ScrollViewer.Background> 
         </ScrollViewer>        
        </Microsoft_Windows_Themes:ClassicBorderDecorator> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
     <Setter Property="Background" Value="{x:Null}"/> 
     <Setter Property="CaretBrush" Value="{DynamicResource {x:static SystemColors.WindowTextBrushKey}}"/> 

здесь Xmlns: Microsoft_Windows_Themes = "CLR-имен : Microsoft.Windows.Themes; сборка = PresentationFramework.Classic "

+0

будет ли это все-таки дать мне мой индивидуальный вид? –

+0

Да, пользовательский внешний вид будет сохранен. Стиль текстового поля можно применять через сеттеры. В текстовом поле у ​​него есть граница, поэтому снова установите стиль для границ через сеттеры «" –

+0

в порядке, и скажите мне, что такое «статический "библиотека u используется? –

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