我需要编辑一些层次结构,并将TreeView
与TextBoxes
简短的例子
<TreeView>
<TreeView.Items>
<TreeViewItem Header="Level 0">
<!-- Level 1-->
<TextBox Margin="5"
BorderThickness="1" BorderBrush="Black" />
</TreeViewItem>
</TreeView.Items>
</TreeView>
当我输入TextBox
,+
,-
时,字母和数字正常工作,箭头有效,但当我按-
时,Level 0
项目崩溃当我输入*
时,没有任何反应
我应如何处理-
和*
按预期在TextBox
中查看它们?
编辑:
-
如果输入为Key.OemMinus
,但不能从数字键盘输入为Key.Subtract
*
如果输入Shift
+ Key.D8
但不是数字键盘Key.Multiply
答案 0 :(得分:16)
终于用Key.Subtract
我在[{1}}
上向PreviewKeyDown
添加了处理程序
TextBox
收到<TextBox Margin="5" BorderThickness="1" BorderBrush="Black"
PreviewKeyDown="TextBoxPreviewKeyDown"
/>
时,Key.Subtract
被标记为已处理,然后我按照此answer(How can I programmatically generate keypress events in C#?)
TextInput
答案 1 :(得分:5)
我可以为你拥有的文本框建议一个keydown事件。
<TextBox Margin="5" KeyDown="TextBox_KeyDown"
BorderThickness="1" BorderBrush="Black" />
private void TextBox_KeyDown(object sender, KeyEventArgs e)
{
TextBox txt = sender as TextBox;
if(e.Key == Key.Subtract)
{
txt.Text += "-";
txt.SelectionStart = txt.Text.Length;
txt.SelectionLength = 0;
e.Handled = true;
}
else if (e.Key == Key.Multiply)
{
txt.Text += "*";
txt.SelectionStart = txt.Text.Length;
txt.SelectionLength = 0;
e.Handled = true;
}
}
它不是一个好的解决方案,但它有效。如果您有任何其他问题&#34;键,您可以为事件添加一个if。
SelectionStart
和SelectionLength
用于将光标定位在文本框的末尾。 e.Handled = true;
确实阻止了默认行为。