【问题标题】:Setting Focus Does Not Allow Instant Editing设置焦点不允许即时编辑
【发布时间】:2011-06-23 01:42:13
【问题描述】:

我有一个带有文本框的 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>

【问题讨论】:

  • 值得补充的是,这是在一个 MVVM 应用程序中,后面的代码中几乎没有代码。

标签: wpf accessibility usability user-input focusmanager


【解决方案1】:

当表单加载完成后,我们最终在后面的代码中使用了 Focus() 方法。

private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
   uxJobNumber.Focus();
}

【讨论】:

  • 谢谢。我有同样的问题,阅读你的答案决定不浪费任何时间来调试这个。不是 MVVM 正统信徒,您的解决方案对我来说完全没问题。
  • 我也遇到了同样的问题,并且求助于代码背后的工作。我在我的应用程序中使用 mahapps,文本框位于 TransitioningContentPresenter 中;也许这正在影响它。
【解决方案2】:

使用您的代码,我可以让它工作;眨眼和所有。

【讨论】:

  • 我编辑了我的问题以包含整个 XAML 文档,希望其他人能够复制该问题。感谢您对此进行调查。
猜你喜欢
  • 1970-01-01
  • 2023-01-30
  • 2011-10-26
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-07
  • 1970-01-01
相关资源
最近更新 更多