2015-12-18 2 views
4

У меня есть шаблон управления, который определяет настраиваемое плавающее текстовое поле.Установить фокус текста в шаблоне управления

Он состоит из метки, границы, которая служит визуальной границей для текстового поля, и текстового поля внутри этой границы.

Граница самого текстового поля сделана невидимой.

Моя проблема заключается в следующем: когда пользовательский элемент управления «вставлен в панель» в пользовательском интерфейсе, элемент управления получает KeyboardFocus, но сам Textbox этого не делает. Это приводит к тому, что мигающий курсор не отображается.

Мне нужно знать, как передать фокус на Textbox, содержащемся на границе, с именем DisplayText, с триггера в шаблоне управления.

Я попытался использовать FocusManager, чтобы установить DisplayText как сфокусированный элемент, но это не сработало.

Любые идеи, мысли или советы будут высоко оценены. Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

Шаблон управления:

<Grid SnapsToDevicePixels="True" 
    UseLayoutRounding="True"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*"/> 
     <ColumnDefinition Width="Auto"/> 
    </Grid.ColumnDefinitions> 
    <Label x:Name="floatingLabel" 
       Template="{DynamicResource LabelControlTemplate1}" 
       Content="{Binding LabelText, RelativeSource={RelativeSource Mode=TemplatedParent}}" 
       IsHitTestVisible="False" 
       Panel.ZIndex="2" 
       Background="White" 
       Height="15" 
       VerticalContentAlignment="Center" 
       Padding="3,0,3,0" 
       HorizontalAlignment="Left" 
       FontFamily="Segoe UI" 
       FontSize="{Binding LabelFontSize, RelativeSource={RelativeSource TemplatedParent}}" 
       Foreground="{DynamicResource FloatingLabelTextBox.Label.Foreground}" 
       VerticalAlignment="Center"> 

     <Label.Tag> 
      <sys:Double>0.0</sys:Double> 
     </Label.Tag> 

     <Label.Margin> 
      <MultiBinding Converter="{StaticResource floatingLabelMarginConverter}"> 
       <Binding Path="Tag" 
          RelativeSource="{RelativeSource Self}" /> 
       <Binding ElementName="Border" 
          Path="ActualHeight" /> 
      </MultiBinding> 
     </Label.Margin> 
    </Label> 

    <Border x:Name="Border" 
       Height="{Binding TextBoxHeight, RelativeSource={RelativeSource TemplatedParent}}" 
       BorderBrush="{TemplateBinding BorderBrush}" 
       BorderThickness="{TemplateBinding BorderThickness}" 
       Background="{TemplateBinding Background}" 
       CornerRadius="3" 
       SnapsToDevicePixels="True" 
       Panel.ZIndex="0" 
       VerticalAlignment="Bottom"> 

     <Grid x:Name="GridContainer" Width="{Binding ElementName=Border, Path=ActualWidth}" Margin="10,0,0,0"> 
      <TextBox x:Name="DisplayText" 
        Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=FormattedPhoneNumber, StringFormat={}{0:(###)###-####}, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" 
        VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" 
        FontFamily="{TemplateBinding FontFamily}" 
        FontSize="{TemplateBinding FontSize}" 
        FontWeight="{TemplateBinding FontWeight}" 
        Foreground="{TemplateBinding Foreground}" 
        Width="{Binding ElementName=Border, Path=ActualWidth}"> 
       <TextBox.Template> 
        <ControlTemplate TargetType="{x:Type TextBox}"> 
         <ScrollViewer x:Name="PART_ContentHost" 
             HorizontalAlignment="Stretch" 
             Margin="{TemplateBinding Padding}" 
             Uid="ScrollViewer_1" 
             VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
        </ControlTemplate> 
       </TextBox.Template> 
      </TextBox> 
     </Grid> 
    </Border> 
</Grid> 

Trigger:

<Trigger Property="IsKeyboardFocused" Value="True"> 
         <Setter Property="FocusManager.FocusedElement" Value="{Binding ElementName=DisplayText}" /> 
        </Trigger> 
+0

Вы когда-нибудь это разрешили? – CptRobby

ответ

1

Попробуйте добавить Focusable="False" к Label.

Я попытался скопировать ваш XAML в окно и запустить его, но есть, очевидно, множество других вещей, которые мне понадобятся, чтобы заставить его работать.

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