首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >装饰器命中测试/ MouseDown事件

装饰器命中测试/ MouseDown事件
EN

Stack Overflow用户
提问于 2010-03-29 09:13:56
回答 2查看 5.8K关注 0票数 6

我有一个装饰器来装饰一个边框(请看下面的截图)。但是,只有在单击装饰器中的元素时,才会引发装饰器的MouseDown事件。当单击装饰元素上方的装饰器中的任何位置时,我需要引发MouseDown事件。如何做到这一点?我是否必须在装饰器中添加一个透明控件,或者是否有其他方法可以做到这一点?谢谢你的帮助!

屏幕截图和VS 2008项目:http://cid-0432ee4cfe9c26a0.skydrive.live.com/browse.aspx/%C3%96ffentlich?uc=2

装饰者的代码:

代码语言:javascript
复制
class myAdorner : Adorner
{
    public myAdorner(UIElement element)
        : base(element)
    {
        this.MouseDown += new System.Windows.Input.MouseButtonEventHandler(myAdorner_MouseDown);
    }


    void myAdorner_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
    {
        MessageBox.Show("ok");
    }


    // Draws two rectangles: one in the upper-left and another one in the lower-right corner
    protected override void OnRender(System.Windows.Media.DrawingContext drawingContext)
    {
        Size size = this.AdornedElement.RenderSize;

        Rect r1 = new Rect(0.5, 0.5, 20, 20);
        Rect r4 = new Rect(size.Width - 20.5, size.Height - 20.5, 20, 20);


        SolidColorBrush brush = new SolidColorBrush(Colors.AliceBlue);
        Pen pen = new Pen(Brushes.Black, 1);

        drawingContext.DrawRectangle(brush, pen, r1);
        drawingContext.DrawRectangle(brush, pen, r4);
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-29 10:00:50

当我以前这样做的时候,我总是使用一个透明的容器。仅有空笔刷是不够的;您实际上需要使用颜色#00000000 (或其他一些alpha 0颜色)。您可以为容器内的元素关闭IsHitTestVisible,以便容器将接收所有鼠标按下事件。

票数 3
EN

Stack Overflow用户

发布于 2010-03-29 10:24:50

所以问题是你的装饰器只能在你的adorner...the中有两个方块的地方引发鼠标事件。

如果你想在你装饰的元素中侦听鼠标事件,你应该注册AdornedElement.PreviewMouseDown,这样你的装饰器就有机会在被装饰的元素触发MouseDown事件之前完成它的工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2535316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档