如何在Silverlight RichTextControl中启用选项卡作为字符
本文关键字:选项 字符 启用 Silverlight RichTextControl | 更新日期: 2023-09-27 18:19:01
我在网上看了看,它似乎支持制表符作为字符,但当我按下Tab
键时,什么也没有发生。RichTextBox
是我的应用程序中唯一的控件,所以我不想让Tab
改变焦点,而是在编辑器中插入制表符。
我需要设置一个属性来启用这个吗?
在我看来,目前没有内置的功能,但你可以自己做:
private void RichTextBox_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Tab)
{
RichTextBox richTextBox = (RichTextBox) sender;
richTextBox.Selection.Select(richTextBox.ContentEnd, richTextBox.ContentEnd);
Run tab = new Run() {Text = "'t"};
richTextBox.Selection.Insert(tab);
}
}
不幸的是,为了模拟WPF中提供的AcceptsTab
属性,所有这些混乱都是所必需的。上述技术将选择设置到RichTextBox
内容的末尾,然后在该位置插入新的Run
(内联文本元素)。
我已经在浏览器中测试过了,它应该也适用于你。如果还有什么需要澄清的,请告诉我。
目前我不知道有什么直接的方法,但是你可以这样做
private void RichTextBox_KeyDown(object sender, KeyEventArgs e)
{
if(e.Key == Key.Tab)
rich.AppendText(" ");
}
这是我的解决方案。也支持SHIFT+TAB
private void txtText_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key == System.Windows.Input.Key.Tab)
{
e.Handled = true;
if ((System.Windows.Input.Keyboard.Modifiers & System.Windows.Input.ModifierKeys.Shift) != 0)
{
var startSel = txtText.Selection.Start;
var endSel = txtText.Selection.End;
var backwardPosition = txtText.Selection.Start.GetNextInsertionPosition(LogicalDirection.Backward);
if (backwardPosition != null)
{
txtText.Selection.Select(backwardPosition, txtText.Selection.Start);
var c = txtText.Selection.Text;
if (c.Equals("'t"))
{
txtText.Selection.Select(backwardPosition, endSel);
txtText.Selection.Text = "";
}
else
{
txtText.Selection.Select(startSel, endSel);
}
}
}
else
{
txtText.Selection.Insert(new Run() { Text = "'t" });
}
}
}