Установка фокуса не позволяет мгновенное редактирование

У меня есть WPF UserControl с текстовым полем. Вот как определяются текстовое поле и его родительский элемент управления:

   <DockPanel Margin="10,20,10,10" FocusManager.FocusedElement="{Binding ElementName=uxJobNumber}" >
     <TextBox x:Name="uxJobNumber" Text="{Binding JobNumber, Mode=TwoWay, ValidatesOnDataErrors=True}" TextWrapping="Wrap" FontSize="48" BorderBrush="Black" BorderThickness="1"  Margin="10"/>
   </DockPanel>

С набором FocusManager.FocusedElement я вижу панель курсора, присутствующую в текстовом поле. Однако полоса курсора не мигает и не позволяет пользователю сразу начать печатать.

Без набора FocusManager.FocusedElement при запуске приложения в текстовом поле вообще нет полосы курсора.

Вот полный XAML

<UserControl x:Class=""
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:converters="clr-namespace:.Modules.Converters"
         xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit/extended"
         xmlns:extToolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit/extended"
         mc:Ignorable="d">
<UserControl.Resources>
    <converters:VisibilityConverter x:Key="Visibility" />
</UserControl.Resources>
<Canvas Width="1024" Height="768" >

    <Border Style="{DynamicResource GroupBox}" Canvas.Left="36.261" Canvas.Top="32.131" Width="426.936">
        <StackPanel>
            <Border>
                <TextBlock Text="STEP 1"/>
            </Border>
            <TextBlock Text="Enter the five (5) digit Job Number and click Verify." />
            <Path/>
            <DockPanel Margin="10,20,10,10" FocusManager.FocusedElement="{Binding ElementName=uxJobNumber}" >
                <Button Content="Verify" Width="125" Height="65" HorizontalAlignment="Right" Command="{Binding SearchJobCommand}" Style="{DynamicResource RedButton}" Margin="0" DockPanel.Dock="Right" IsDefault="True"/>
                <TextBox Text="{Binding JobNumber, Mode=TwoWay, ValidatesOnDataErrors=True}" TextWrapping="Wrap" FontSize="48" BorderBrush="Black" BorderThickness="1" x:Name="uxJobNumber" Margin="10" KeyboardNavigation.TabIndex="0" />
            </DockPanel>
        </StackPanel>
    </Border>
    <TextBlock Text="{Binding Error}" Visibility="{Binding HasError, Converter={StaticResource Visibility}}" Canvas.Left="48" Canvas.Top="288" FontSize="16" Width="403" Foreground="Red" />       
</Canvas>


person Nick Heidke    schedule 17.06.2011    source источник
comment
Возможно, стоит добавить, что это приложение MVVM практически без кода в коде позади.   -  person Nick Heidke    schedule 17.06.2011


Ответы (2)


Наконец, мы прибегли к использованию метода Focus() в коде после завершения загрузки формы.

private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
   uxJobNumber.Focus();
}
person Nick Heidke    schedule 22.06.2011
comment
Спасибо. У меня была та же проблема, и, прочитав ваш ответ, я решил не терять время на отладку. Не будучи ортодоксальным сторонником MVVM, ваше решение меня вполне устраивает. - person Dabblernl; 06.07.2013
comment
У меня тоже была такая же проблема, и сработал код позади. Я использую mahapps в своем приложении, а текстовое поле находится внутри TransitioningContentPresenter; может это и влияет. - person Zach Green; 27.03.2014

Используя ваш код, я заставляю это работать; моргает и все.

person Jerry Nixon    schedule 17.06.2011
comment
Я отредактировал свой вопрос, включив в него весь документ XAML с некоторой надеждой, что другие смогут воспроизвести проблему. Спасибо, что изучили это. - person Nick Heidke; 18.06.2011