带文本框的TreeView不接受星号(NumPad)

时间:2014-06-10 21:16:03

标签: c# wpf xaml textbox treeview

我有一个树视图,其中包含几个文本框,当我尝试从NumPad输入星号时,它不起作用(Shift + 8工作)。

我一直在环顾四周,发现默认情况下星号会在树视图中触发一个动作。

有没有办法让文本框接受星号而不是触发默认的树视图操作?

2 个答案:

答案 0 :(得分:1)

这里我根据msdn的回复制作了一些代码。这被用于" +"和" - "从numpad,你可以用星号做同样的事情......

 private void UIElement_OnKeyDown(object sender, KeyEventArgs e)
    {
        var textbox = e.OriginalSource as TextBox;
        if (textbox != null && (e.Key == Key.Add || e.Key == Key.Subtract))
        {


            string signToInsert = e.Key == Key.Add ? "+" : "-";
            if (textbox.SelectionLength == 0)
            {
                int caretPosition = textbox.CaretIndex;
                textbox.Text = textbox.Text.Insert(caretPosition, signToInsert);
                textbox.CaretIndex = caretPosition + 1;
            }
            else
            {
                int selectionStart = textbox.SelectionStart;
                int selectionLength = textbox.SelectionLength;

                string newText = "";
                newText += textbox.Text.Substring(0, selectionStart);
                newText += signToInsert;
                newText += textbox.Text.Substring(selectionStart + selectionLength);
                textbox.Text = newText;

                textbox.CaretIndex = selectionStart + 1;
            }

            e.Handled = true;
        }
    }

答案 1 :(得分:0)

要使文本框接受星号而不触发默认的树视图操作,请使用内置的内置WPF InputBindings。设置KeyBindingApplicationCommands.NotACommandKey.Multiply作为关键动作。在TreeView级别设置KeyBindings,如下所示。

<TreeView.InputBindings>
    <KeyBinding Gesture="Multiply" Command="ApplicationCommands.NotACommand" /> 
</TreeView.InputBindings>

请注意,这将禁用绑定到Key.Multiply的命令,即NumPad星号。引用ApplicationCommands.NotACommand媒体资源上的MSDN页面:

  

此命令始终被忽略,并且不处理导致它的输入事件。这提供了一种关闭内置于现有控件中的输入绑定的方法。