我发现这个答案看起来像我需要的:
除了事实我不能创建一个实例KeyEventArgs(我不知道如何)
有问题的代码是:
var key = Key.Insert; // Key to send
var target = Keyboard.FocusedElement; // Target element
var routedEvent = Keyboard.KeyDownEvent; // Event to send
target.RaiseEvent(
new KeyEventArgs(
Keyboard.PrimaryDevice,
PresentationSource.FromVisual(target), //<--- HERE, I can't
0,
key)
{ RoutedEvent=routedEvent }
);
Run Code Online (Sandbox Code Playgroud)
编译器说:
The best overloaded method match for
'System.Windows.PresentationSource.FromDependencyObject(System.Windows.DependencyObject)'
has some invalid arguments
Run Code Online (Sandbox Code Playgroud)
ide说:
参数类型IInputElement不能分配参数类型DependencyObject
在StackOverflow中,我找到了几个指向答案的答案,但没有一个解决如何在第一时间创建实例.
我怎样才能做到这一点?
我需要编辑一些层次结构,我用TreeView用TextBoxes
简短的例子
<TreeView>
<TreeView.Items>
<TreeViewItem Header="Level 0">
<!-- Level 1-->
<TextBox Margin="5"
BorderThickness="1" BorderBrush="Black" />
</TreeViewItem>
</TreeView.Items>
</TreeView>
Run Code Online (Sandbox Code Playgroud)
当我输入TextBox,+,-,字母和数字做工精细,箭头工作,但是当我按下-,Level 0项目崩溃并且当我输入*,没有任何反应
我应该如何处理-并按预期*看到它们TextBox?
编辑:
-如果输入Key.OemMinus但不是从数字键盘输入,则可以正常工作Key.Subtract
*如果键入为Shift+ Key.D8但不是数字键盘,则可以正常工作Key.Multiply
我正在尝试对WPF控件进行单元测试,并且需要模拟按键按下.我在这里看到了一个可能的解决方案,但是当我尝试传入PresentationSource时,我不断获得一个空值(来自PresentationSource.FromVisual()或PresentationSource.FromDependencyObject()),这会触发异常.
我的问题是如何获得我可以在单元测试中使用的非null PresentationSource?
我想模拟WPF TextBox的用户输入.我想输入一个字符,以便触发OnPreviewTextInput事件.我尝试通过Text属性设置Text,但这并没有触发事件:
public void SomeFunction()
{
var textBox = new TextBox();
textBox.Text = "A";
}
Run Code Online (Sandbox Code Playgroud)
我能以某种方式明确地触发事件吗?
java程序应该做的是它应该在某些条件下触发键盘按下而无需人按键盘键.因此,任何需要键盘输入的窗口和焦点运行的程序都可以在没有人实际按下键盘的情况下获得输入.
我想知道在Java中是否有任何方法可以做到这一点.
如何在不按键盘键的情况下触发按键事件?我试过这里的解决方案,但我得到以下异常:
'System.Windows.PresentationSource.FromVisual(System.Windows.Media.Visual)'的最佳重载方法匹配具有一些无效参数.
考虑Shift+A包含键盘上的2键按键事件,如何在不按键盘的情况下执行此操作?(让我们只需在按钮单击的文本框中打印大写字母A)
我的代码
var key = Key.A; // Key to send
var target = Keyboard.FocusedElement; // Target element
var routedEvent = Keyboard.KeyDownEvent; // Event to send
target.RaiseEvent(new System.Windows.Input.KeyEventArgs(Keyboard.PrimaryDevice, System.Windows.PresentationSource.FromVisual(target), 0, key) { RoutedEvent = routedEvent });
Run Code Online (Sandbox Code Playgroud) 我在对我编写的行为进行单元测试时遇到问题。行为如下:
NumericTextBoxBehavior : Behavior<TextBox>
{
//handles few events like TextChanged ,PreviewTextInput , PreviewKeyDown , PreviewLostKeyboardFocus
//to give make it accept numeric values only
}
Run Code Online (Sandbox Code Playgroud)
在单元测试相同的同时我编写了这段代码
TextBox textBoxInvoker = new TextBox();
NumericTextBoxBehavior target = new NumericTextBoxBehavior();
System.Windows.Interactivity.Interaction.GetBehaviors(TextBoxInvoker).Add(target);
Run Code Online (Sandbox Code Playgroud)
现在要提出这个事件我必须打电话
textBoxInvoker.RaiseEvent(routedEventArgs)
Run Code Online (Sandbox Code Playgroud)
此路由事件参数又将路由事件作为参数。
请帮助我如何创建模拟 RoutedEventArgs 来引发事件并进一步对行为进行单元测试。
提前致谢。
我希望能够修改wpf文本框的行为,而无需实现新类.
我想要一个像输入/ Alt + Enter行为的Excel,当用户点击"Enter"时,文本框被验证(movefocus ...),但当他点击"ALT + Enter"时,文本框必须添加一个新行(my textbox支持多行:AcceptsReturn为true).
我已经尝试过(在文本框中的PreviewKeyDown事件): - 在此链接之后构建一个KeyEventArgs和一个TextCompositionEventArgs:如何在C#中以编程方式生成keypress事件? - 我尝试过SendKeys.SendWait("{ENTER}")但它发送了许多新的行命令
有没有办法做到这一点 ?
谢谢
private void m_MeasurementName_PreviewKeyDown(object sender, KeyEventArgs e)
{
var tb = (sender as TextBox);
if (Keyboard.Modifiers == ModifierKeys.Alt && Keyboard.IsKeyDown(Key.Enter))
{
// 1st try
var key = "\n\r";
var routedEvent = Keyboard.KeyDownEvent;
tb.RaiseEvent(new TextCompositionEventArgs(InputManager.Current.PrimaryKeyboardDevice, new TextComposition(InputManager.Current, tb, key)) { RoutedEvent = routedEvent });
// 2nd
var key = Key.Enter;
var routedEvent = TextCompositionManager.TextInputEvent;
tb.RaiseEvent(new KeyEventArgs(Keyboard.PrimaryDevice, PresentationSource.FromVisual(tb), 0, key) { RoutedEvent = routedEvent }); …Run Code Online (Sandbox Code Playgroud) 我想在 ac# windows 窗体应用程序中实现键盘按钮按下命令。假设如果达到某个值,我想使用 Windows 窗体应用程序按下“L”键。这可能吗?怎么做 ?