我有一个树视图,其中包含几个文本框,当我尝试从NumPad输入星号时,它不起作用(Shift + 8工作)。
我一直在环顾四周,发现默认情况下星号会在树视图中触发一个动作。
有没有办法让文本框接受星号而不是触发默认的树视图操作?
答案 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
。设置KeyBinding
到ApplicationCommands.NotACommand
,Key.Multiply
作为关键动作。在TreeView级别设置KeyBindings,如下所示。
<TreeView.InputBindings>
<KeyBinding Gesture="Multiply" Command="ApplicationCommands.NotACommand" />
</TreeView.InputBindings>
请注意,这将禁用绑定到Key.Multiply
的命令,即NumPad星号。引用ApplicationCommands.NotACommand
媒体资源上的MSDN页面:
此命令始终被忽略,并且不处理导致它的输入事件。这提供了一种关闭内置于现有控件中的输入绑定的方法。