Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在恢复传播之前修改已接收WPF路由事件参数的属性?_C#_.net_Wpf_Wpf Controls - Fatal编程技术网

C# 如何在恢复传播之前修改已接收WPF路由事件参数的属性?

C# 如何在恢复传播之前修改已接收WPF路由事件参数的属性?,c#,.net,wpf,wpf-controls,C#,.net,Wpf,Wpf Controls,我正在使用一个从WPF文本框继承的自定义文本框,试图了解WPF事件,因此我的问题如下:当文本框接收到输入时,我希望它接收该输入的大小写反转版本。例如,如果我键入键(小写字母)“a”,我希望文本框打印一个(大写字母)“a”,而不是(小写字母)“a” 我的(部分)解决方案是,在我的自定义TextBox中,通过重载该方法来截获TextInput事件。调用此方法时,我收到一个属性为“a”的 因此,我的第一个反射是将这个文本属性更新为“A”,如下代码所示: protected override void

我正在使用一个从WPF文本框继承的自定义文本框,试图了解WPF事件,因此我的问题如下:当文本框接收到输入时,我希望它接收该输入的大小写反转版本。例如,如果我键入键(小写字母)“a”,我希望文本框打印一个(大写字母)“a”,而不是(小写字母)“a”

我的(部分)解决方案是,在我的自定义TextBox中,通过重载该方法来截获TextInput事件。调用此方法时,我收到一个属性为“a”的

因此,我的第一个反射是将这个文本属性更新为“A”,如下代码所示:

protected override void OnPreviewTextInput(TextCompositionEventArgs e)
{
   e.Text = "A" ;
   base.OnPreviewTextInput(e) ;
}
问题是e.Text是只读的,我没有找到简单的方法来实现这一点(我搜索并调整了and,试图从零开始构造一个,复制数据,等等)

我错过了什么明显的东西吗? 有办法吗


另一个解决方案是使用WPF TextBox接口来调整结果(检索current.Text属性,将反转字符放入其中,等等),但这不是理想的解决方案,因为它完全绕过了我试图解决的路由事件生成/修改问题)

您无法更改事件数据。这些事件是为了通知您某些事情已经发生或正在发生,并可能让您取消/处理它

在您的情况下,最好将事件标记为,然后自己将文本附加到文本框中


如果您只需要大写字母,您可以使用正是这样做的属性。

Yes e是只读的。和Key.A是一个干净的语法。看看重写。@BalamBalam:不完全是,
e.Text
是只读的(正如我在原始问题中所写的),但是
e
不是(因为
e.Handled
可以修改)。。。谢谢你的意见,不过…^ ^ ^。。。你说的“And Key.A是一个干净的语法”是什么意思?通过“看凌驾性”?你的评论令人困惑。正如我在原始问题的附言中所写的,我已经尝试了解决方法,但在某些情况下(例如,将相同的功能应用于组合框),这是不可能的。截取原始事件并发送新事件似乎是最好的解决方案,但我在调试中看到,一些私有字段在原始事件和我自己的事件(位向量、调用处理程序、阶段等)中的设置方式不同。路由事件系统的设计没有考虑到您的建议,因此以这种方式使用它几乎是不可能的-动态修改值。公认的答案:这个答案非常不幸(从我的观点来看),但是,我们必须尽可能多地使用可用的…^ ^ ^。。。在我的例子中,我必须截取事件(并在调用基本方法之前将其标记为已处理),在我想要处理的情况下,“手动”再现所需的效果(包括部分文本的选择),这是一个痛苦(和维护噩梦)。