gpt4 book ai didi

wpf - 创建依赖属性以在 XAML 中设置自定义事件处理程序

转载 作者:行者123 更新时间:2023-12-04 19:22:47 25 4
gpt4 key购买 nike

我想使用 DependencyProperties 向默认框架元素添加自定义事件处理程序.

类似于以下内容:

<Border custom:MyProps.HandleMyEvent="someHandler">...</Border>

下面是包含 Border 元素的控件的代码:
public class MyPage : Page{
public void someHandler(object sender, EventArgs e){
//do something
}
}

这是我如何想象定义属性的类的粗略示例:
public class MyProps{
public event EventHandler MyInternalHandler;
public static readonly DependencyProperty HandleMyEventProperty = ...
public void SetHandleMyEvent(object sender, EventHandler e){
MyInternalHandler += e;
}
}

问题是我不知道/没有找到任何关于如何组合 DependencyProperties 的提示。与事件/代表和 EventHandlers .

你有什么线索吗?

最佳答案

我将假设这与 WPF 无关,这是一个silverlight 问题。

首先,您不能简单地添加 Event到现有控件。毕竟你正在添加附件 Properties虽然事件的处理方式不同,但它们不是属性。

您需要创建一个具有此事件的新类型,然后创建此类型的附加属性。

这是一个基本类型,只有一个事件:-

public class MyEventer
{
public event EventHandler MyEvent;

// What would call this??
protected void OnMyEvent(EventArgs e)
{
if (MyEvent != null)
MyEvent(this, e);
}
}

现在我们创建一个附加属性,它具有 MyEventer作为它的属性,我更喜欢将它们放在一个单独的静态类中。
public static class MyProps
{

public static MyEventer GetEventer(DependencyObject obj)
{
return (MyEventer)obj.GetValue(EventerProperty );
}

public static void SetEventer(DependencyObject obj, MyEventer value)
{
obj.SetValue(EventerProperty , value);
}

public static readonly DependencyProperty EventerProperty =
DepencencyProperty.RegisterAttached("Eventer", typeof(MyEventer), typeof(MyProps), null)

}
}

现在您将其附加到这样的控件上:-
<Border ...>
<custom:MyProps.Eventer>
<custom:MyEventer MyEvent="someHandler" />
</custom:MyProps.Eventer>
</Border>

如果您在编写此 xaml 之前编译项目,您会注意到 Visual Studio 将为您提供在后面的代码中为您创建事件处理程序的选项。

当然,这仍然留下了一个重要的问题:您打算如何引发事件?

关于wpf - 创建依赖属性以在 XAML 中设置自定义事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2272095/

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