在WPF中使用TextBox的TreeViewItem:键入特殊字符

时间:2015-08-28 07:29:02

标签: c# wpf treeview

我需要编辑一些层次结构,并将TreeViewTextBoxes

一起使用

简短的例子

<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

,则有效

2 个答案:

答案 0 :(得分:16)

终于用Key.Subtract

解决了问题

我在[{1}}

上向PreviewKeyDown添加了处理程序
TextBox

收到<TextBox Margin="5" BorderThickness="1" BorderBrush="Black" PreviewKeyDown="TextBoxPreviewKeyDown" /> 时,Key.Subtract被标记为已处理,然后我按照此answerHow can I programmatically generate keypress events in C#?)KeyDown事件>

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。

SelectionStartSelectionLength用于将光标定位在文本框的末尾。 e.Handled = true;确实阻止了默认行为。