gpt4 book ai didi

c# - 设置/取消设置键盘焦点

转载 作者:行者123 更新时间:2023-11-30 17:48:47 25 4
gpt4 key购买 nike

尝试实现一个简单的 HTML 编辑器 TextBox。我有一个 UserControl,其中 Canvas 作为主容器,TextBoxListBox 作为其子容器。默认情况下,ListBox 是不可见的。当用户按下 CTRL + SPACE 时,ListBox 应该出现在 TextBox 的当前插入符位置并且焦点应该转移到它,就像 Visual Studios 的 List Members 功能一样。然后用户从列表中选择一个项目并按下 ENTER,所选项目被插入到 TextBox 中。 ListBox 然后再次变得不可见,焦点转移回 TextBox

下面的代码可以让我完成以上所有工作;几乎。它只适用于第一次!下次我按 CTRL + ENTER 时,ListBox 出现并且似乎也有焦点,但按下(或向上)箭头会将焦点移回 TextBox ,因此移动了插入符号。这里有什么问题吗?

private void txt_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key == Key.Space && (Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
{
var Rect = txt.GetRectFromCharacterIndex(txt.SelectionStart , true);
Canvas.SetLeft(lst, Rect.Right);
Canvas.SetTop(lst, Rect.Bottom);

lst.Visibility = System.Windows.Visibility.Visible;
lst.Focus();
}

}

private void lst_KeyDown(object sender, KeyEventArgs e)
{
if(e.Key == Key.Enter)
{
txt.Focus();
lst.Visibility = System.Windows.Visibility.Hidden;
txt.SelectedText = lst.SelectedItem.ToString();
txt.SelectionStart += lst.SelectedItem.ToString().Length;
txt.SelectionLength = 0;
}
}

最佳答案

我能够重现您的问题,焦点似乎没有分配给您的列表框,而是保留在文本框中。我能够通过使用文本框的 MoveFocus 方法让它工作。尽管这取决于控件的实际 Tab 键顺序。

txt.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));

关于您的评论,我确实注意到了这一点,并通过确保将列表框的 selectedIndex 设置为 -1 来解决这个问题

lst.SelectedIndex = -1;

关于c# - 设置/取消设置键盘焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22446876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com