gpt4 book ai didi

wpf - 处理来自包含 WPF 文本框的用户控件的事件

转载 作者:行者123 更新时间:2023-12-04 06:56:25 24 4
gpt4 key购买 nike

为了利用 WPF 文本框的拼写检查功能,我在用户控件中添加了一个(使用 elementhost)。此用户控件用于各种窗口形式。我当前的问题是尝试处理来自此文本框的 keyup 事件,但 windows 窗体无法从控件“获取”任何事件。我可以很好地访问文本框的属性(即文本、长度等),但键盘事件似乎不起作用。

但是,我发现以下内容将从 WPF 文本框中带回事件:

Public Class MyUserControl

Private _elementHost As New ElementHost
Private _wpfTextbox As New System.Windows.Controls.Textbox

Private Sub MyUserControl_Load(...) Handles Me.Load
Me.Controls.Add(_elementHost)
_elementHost.Dock = DockStyle.Fill
_elementHost.Child = _wpfTextbox

Dim MyEventInfo As EventInfo
Dim MyMethodInfo As MethodInfo
MyMethodInfo = Me.GetType().GetMethod("WPFTextbox_KeyUp")
MyEventInfo = _wpfTextBox.GetType().GetEvent("PreviewKeyUp")
Dim dlg As [Delegate] = [Delegate].CreateDelegate(MyEventInfo.EventHandlerType, Me, MyMethodInfo)
MyEventInfo.AddEventHandler(_wpfTextBox, dlg)
End Sub

Public Sub WPFTextbox_KeyUp(ByVal sender As Object, ByVal e As RoutedEventArgs)
' something goes here
End Sub

End Class

在 WPF 文本框中触发 PreviewKeyUp 事件后,用户控件现在可以执行某些操作。现在,我不完全确定如何让包含此用户控件的窗口窗体与此一起使用。

最佳答案

我不是 VB 的 C# 人,所以请耐心等待。

this.myUserContorl.PreviewKeyUp += new System.Windows.Input.KeyEventHandler(WPFTextbox_KeyUp);

然后将事件处理程序放在您的窗口中:
    private void WPFTextbox_KeyUp(object sender, System.Windows.Input.KeyEventArgs e)
{

}

顺便说一句,您不需要在 UserControl 中捕获事件的麻烦,因为您仍然可以直接从您的 Window(如果您将其公开)访问您 UserControl 中的 TextBox,再次从您的 Window 中的构造函数:
this.myUserContorl.wpfTextbox.PreviewKeyUp += new System.Windows.Input.KeyEventHandler(WPFTextbox_KeyUp);

我想它在 VB 中看起来像这样(猜测):
AddHandler myUserContorl.wpfTextbox.PreviewKeyUp, AddressOf WPFTextbox_KeyUp

关于wpf - 处理来自包含 WPF 文本框的用户控件的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2496247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com