Wpf 创建用于在XAML中设置自定义EventHandler的依赖项属性

Wpf 创建用于在XAML中设置自定义EventHandler的依赖项属性,wpf,silverlight,silverlight-3.0,delegates,dependency-properties,Wpf,Silverlight,Silverlight 3.0,Delegates,Dependency Properties,我想使用dependencProperties向默认框架元素添加自定义事件处理程序 如下所示: <Border custom:MyProps.HandleMyEvent="someHandler">...</Border> 下面是我如何想象定义属性的类的粗略示例: public class MyProps{ public event EventHandler MyInternalHandler; public static readonly Depend

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

如下所示:

<Border custom:MyProps.HandleMyEvent="someHandler">...</Border>
下面是我如何想象定义属性的类的粗略示例:

public class MyProps{
    public event EventHandler MyInternalHandler;
    public static readonly DependencyProperty HandleMyEventProperty = ...
    public void SetHandleMyEvent(object sender, EventHandler e){
         MyInternalHandler += e;
    }
}
问题是,我不知道/没有找到任何关于如何将
dependencProperties
与事件/委托和
EventHandlers
相结合的提示


你有什么线索吗?

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

首先,不能简单地将
事件添加到现有控件中。毕竟,您添加的是附加的
属性
,而事件的处理方式不同,它们不是属性

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

下面是一个基本类型,它只包含一个事件:-

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之前编译项目,您会注意到VisualStudio将为您提供一个选项,让它在代码中为您创建事件处理程序


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

我们可以得到关于此解决方案将针对的问题的提示吗?如果您正在考虑将事件添加到默认框架元素,只需子类化或使用行为即可。事件由我正在编写的框架触发。正如您正确演示的那样,我需要一些OnMyEvent函数来轻松触发用户定义的处理程序。现在,用户可以使用XAML中的tab键定义自定义处理程序或生成新的处理程序。非常好,即使我更喜欢直接依赖财产而不需要额外的..>。使用起来会很好。无论如何,感谢您的宝贵意见!:)命名约定遵从性非常差。
<Border ...>
   <custom:MyProps.Eventer>
      <custom:MyEventer MyEvent="someHandler" />
   </custom:MyProps.Eventer>
</Border>