【问题标题】:wpf setting keyboard focus on textbox using xamlwpf使用xaml在文本框上设置键盘焦点
【发布时间】:2015-07-20 12:34:17
【问题描述】:

在窗口加载后的 wpf 项目中,我尝试使用 xaml 将焦点设置在文本框上。

我的文本框在网格内。这是我使用的代码

<Grid Name="gvLoginPage"
      Margin="0,30,0,0"
      FocusManager.FocusedElement="{Binding ElementName=txtUserName}">
 <TextBox Name="txtUserName"
          Focusable="True"
          ToolTip="Please enter your user name"
          Width="300"
          Height="22"
          VerticalContentAlignment="Top"
          TextWrapping="Wrap"
          Grid.Row="0"
          Grid.Column="1"
          BorderBrush="Black">
<Grid>

此代码正在设置焦点,但光标不闪烁,我无法输入任何内容。

然后我遇到了这个问题Get and restore WPF keyboard focus,他解释说有两种类型的焦点,一种是逻辑焦点,另一种是键盘焦点,FocusManager.FocusedElement 设置逻辑焦点而不是键盘焦点。所以我不能让光标闪烁。

使用后面的代码可以解决这个问题

Keyboard.Focus(txtUserName);

但我想尽可能少地保留我的代码。所以请有人帮助我使用 xaml 将键盘焦点设置在文本框上。

【问题讨论】:

  • 我已经检查了这个链接。但我想知道有没有办法只使用 xaml 来做到这一点。否则我也可以使用 Keyboard.Focus 方法。
  • 在同一个链接中已经提到了仅使用 xaml 设置焦点。请检查所有答案。
  • 上面的链接显示了一种在不破坏 MVVM 模式的情况下实现此目的的方法。如果您想要一个纯 XAML 方法,您可以修改该示例以使用在窗口 Loaded 事件上触发的事件触发器。

标签: wpf xaml


【解决方案1】:

根据@olitee 的评论,我使用gridview 的IsVisible 属性来触发DataTrigger 并将Focusmanager.FocusedElement 设置为我的Textbox。这里是代码

<Style x:Key="trgFocus" TargetType="TextBox">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=gvLoginPage, Path=IsVisible}" Value="true">
                    <Setter Property="FocusManager.FocusedElement" Value="{Binding ElementName=txtUserName}" />
                </DataTrigger>

            </Style.Triggers>

现在我的光标在闪烁。谢谢@olitee 和@Palak

【讨论】:

    猜你喜欢
    • 2011-02-21
    • 1970-01-01
    • 2010-11-23
    • 2010-10-10
    • 2022-07-18
    • 2017-01-22
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    相关资源
    最近更新 更多