【发布时间】:2014-04-22 05:11:15
【问题描述】:
尝试实现一个简单的 HTML 编辑器 TextBox。我有一个用户控件,其中 Canvas 作为主容器,TextBox 和 ListBox 作为其子容器。默认情况下,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;
}
}
【问题讨论】:
-
+1,因为我想看看这样的事情是如何完成的
-
+1 用于制作可用的测试示例
-
我感觉这和msdn.microsoft.com/en-us/library/vstudio/…有关。挖掘更多。