我想使用 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/