gpt4 book ai didi

c# - WPF - 来自用户控件内部的事件

转载 作者:行者123 更新时间:2023-11-30 14:17:52 25 4
gpt4 key购买 nike

我们在尝试为 WPF 中的自定义控件创建事件时遇到问题。我们有这样的代码:


public static readonly RoutedEvent KeyPressedEvent =
EventManager.RegisterRoutedEvent(
"keyPressed", RoutingStrategy.Bubble,
typeof(KeyEventHandler), typeof(Keyboard));<p></p>

<pre><code> public event KeyEventHandler keyPressed
{
add { AddHandler(KeyPressedEvent, value); }
remove { RemoveHandler(KeyPressedEvent, value); }
}

void btnAlphaClick(object sender, RoutedEventArgs e)
{
var btn = (Button)sender;
Key key = (Key)Enum.Parse(typeof(Key), btn.Content.ToString().ToUpper());
PresentationSource source = null;
foreach (PresentationSource s in PresentationSource.CurrentSources)
{
source = s;
}
RaiseEvent(new KeyEventArgs(InputManager.Current.PrimaryKeyboardDevice, source,0,key));
</code></pre>

<p></p>

控件是一个屏幕键盘,我们基本上需要将 KeyPressedEventArgs 传递给事件的订阅者,详细说明按下了什么键(我们在 WPF 中找不到太多帮助我们的东西,只有 winforms) .

任何帮助,不胜感激!

最佳答案

第 1 步:将事件处理程序添加到确定和取消按钮

private void btnOK_Click(object sender, RoutedEventArgs e)
{
}

private void btnCancel_Click(object sender, RoutedEventArgs e)
{
}

在UserControl1.xaml.cs文件中添加public属性,与宿主共享文本框的值

public string UserName
{
get { return txtName.Text; }
set { txtName.Text = value; }
}

声明可以被 Windows 窗体订阅的确定和取消按钮的事件。

public event EventHandler OkClick;
public event EventHandler CancelClick;

现在将代码添加到事件处理程序,以便我们也可以将事件引发到宿主。

private void btnOK_Click(object sender, RoutedEventArgs e)
{
if (OkClick != null)
OkClick(this, e);
}

private void btnCancel_Click(object sender, RoutedEventArgs e)
{
if (CancelClick != null)
CancelClick(this, e);
}

第 2 步:处理 Windows 窗体中的 WPF 控件事件

在创建用户控件实例后,将处理程序添加到 OKClickCancelClick 事件

_WPFUserControl.OkClick += new EventHandler(OnOkHandler);
_WPFUserControl.CancelClick += new EventHandler(OnCancelHandler);

在处理程序方法中编写代码。在这里,我在 OK 按钮处理程序中使用了 UserName 属性,因此也展示了如何共享这些值。

protected void OnOkHandler(object sender, EventArgs e)
{
MessageBox.Show("Hello: " +_WPFUserControl.UserName + " you clicked Ok Button");
}

protected void OnCancelHandler(object sender, EventArgs e)
{
MessageBox.Show("you clicked Cancel Button");
}

引用: http://a2zdotnet.com/View.aspx?Id=79

关于c# - WPF - 来自用户控件内部的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5379264/

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