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

标签 wpf silverlight silverlight-3.0 delegates dependency-properties

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

相关文章:

c# - 添加时在窗体中查找UserControl

c# - WPF NotifyIcon不触发MouseEnter事件(显示工具提示时如何更新NotifyIcon View 模型)

silverlight - 如何在wp7中动态添加listbox.itemssource中的元素?

Silverlight 将 byte[] 转换为图像的字符串

silverlight-3.0 - 如何使用 VisualStateManager 返回 "Base"状态?

WPF - DataTemplate 绑定(bind)到静态成员

c# - 基于其他控件的 Gotfocus 显示控件的文本

.net - 我应该使用哪些资源将我的 .NET 应用程序移植到 Mono 或 Moonlight?

Silverlight:绑定(bind)到静态值

silverlight - 如何调整 Silverlight 3 应用程序和所有子控件的大小并保持纵横比