【问题标题】:Copy event handler from one Canvas to another wpf将事件处理程序从一个 Canvas 复制到另一个 wpf
【发布时间】:2015-08-13 11:30:26
【问题描述】:

我有一个Canvas。稍后在我的代码中,我将创建一个新的Canvas,它将位于第一个Canvas 之上,并且应该具有第一个Canvas 的一些属性。

我能够设置我想要的所有东西。剩下的就是将新的CanvasMouseEnterMouseMove 事件注册到原来的Canvas 注册到的同一个事件处理程序中。

这是一种方法吗?我用谷歌搜索了它,但没有找到我要找的东西。

示例:

private void OnMouseEnter(object sender, MouseEventArgs e)
{
     ////// some code
}

Canvas c = new Canvas();
c.MouseEnter += OnMouseEnter;

Canvas c2 = new Canvas();
///// I want to do something like this:
c2.MouseEnter = c.MouseEnter;

【问题讨论】:

  • 最简单和最干净的解决方案是将第一个画布的事件处理程序移动到公共方法中,然后您可以从第二个画布事件中调用这些方法。
  • 您在这样使用时是否遇到任何错误?
  • 没有尝试过,我不想这样做,因为画布位于不同的 dll 项目中。
  • 听起来你应该稍微改变你的设计。为什么要交换画布?为什么在隐藏的画布上处理事件很重要?

标签: c# wpf mousemove mouseenter eventhandler


【解决方案1】:

你在找Event Bubbling

Canvas canvas1 = new Canvas();
canvas1.Width = 200;
canvas1.Height = 200;
canvas1.Background = Brushes.Black;
canvas1.MouseDown += canvas1_MouseEnter;

Canvas canvas2 = new Canvas();
canvas2.Width = 100;
canvas2.Height = 100;
canvas2.Background = Brushes.Red;            
canvas1.Children.Add(canvas2); //canvas1 events will get fired for canvas2 also

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    相关资源
    最近更新 更多