WPF / C中的文本框上的光标聚焦#

时间:2009-05-06 05:31:51

标签: c# wpf textbox

我目前正在创建一个屏幕键盘。我正在使用routedcommands处理按钮单击。问题是,当我点击键盘面板上的按钮时,焦点会转移到按钮而不是文本框。该要求规定光标应始终出现在文本框中,以指示将插入下一个字符的位置。有没有办法在点击按钮时可以将注意力集中在文本框上。

8 个答案:

答案 0 :(得分:34)

将逻辑焦点设置为输入控件

FocusManager.SetFocusedElement(this, textboxJack);     // set logical focus

将键盘焦点设置为输入控件

Keyboard.Focus(textboxJill);                             // set keyboard focus

了解逻辑和键盘焦点之间的区别

MSDN上的

Input Overview - Focus

答案 1 :(得分:8)

获取特定控件的引用(在本例中为TextBox)。单击后,在Button_Click方法中粘贴:

Dispatcher.BeginInvoke((ThreadStart)delegate
            {
                control.Focus();
            });

答案 2 :(得分:5)

我喜欢这些做我的作业问题; “要求说明”......无价之宝。对于那些通过Google发现这一点的人来说,在WPF TextBox中逐步移动光标的技巧是使用SelectioNStart属性。

private void Button_Click(object sender, RoutedEventArgs e)
{
    textBox.Focus();
    textBox.SelectionStart = textName.Text.Length;
}

答案 3 :(得分:3)

Textbox.Focus();

这将集中在文本框

答案 4 :(得分:2)

我解决这个问题的方法是将focusable=false设置为键盘上的所有按钮/控件。这样你就不会失去当前控制的重点。

答案 5 :(得分:1)

您的问题可以通过为“键盘”使用单独的对焦范围来解决。只需将以下属性应用于包含所有按钮的控件,然后它们将位于单独的焦点范围内,并且在单击时不会将焦点设置为它们

FocusManager.IsFocusScope="True"

答案 6 :(得分:1)

我必须使用它来获得我想要的结果

FocusManager.SetFocusedElement(this, UserNameautoCompleteBox);

Key key = Key.Enter;                    // Key to send
var target = Keyboard.FocusedElement;    // Target element
RoutedEvent routedEvent = Keyboard.KeyDownEvent; // Event to send

target.RaiseEvent(
    new KeyEventArgs(
        Keyboard.PrimaryDevice,
        PresentationSource.FromVisual(UserNameautoCompleteBox),
        0,
        key) { RoutedEvent = routedEvent }
);

答案 7 :(得分:0)

我想做同样的事情,但似乎没有什么对我有用。当我正在使用MVVM时,我真的需要一个纯粹在XAML中工作的答案。

我终于找到了这个例子: http://spin.atomicobject.com/2013/03/06/xaml-wpf-textbox-focus/

并将其修改为:

在“资源”部分:

    <Style x:Key="FocusTextBox" TargetType="Grid">
        <Style.Triggers>
            <DataTrigger Binding="{Binding ElementName=textBoxName, Path=IsVisible}" Value="True">
                <Setter Property="FocusManager.FocusedElement" Value="{Binding ElementName=textBoxName}"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>

在我的网格定义中:

<Grid Style="{StaticResource FocusTextBox}" />