none
我从FrameworkElement继承了一个组件,为什么不会触发其MouseDown事件? RRS feed

  • 问题

  • 我从FrameworkElement继承了一个组件,里面什么内容也没有,不会触发MouseDown事件,但是我只要里面添加了内容,就会在内容范围内触发mousedown事件。请问这是怎么回事?怎么才能在没有内容的时候,使其触发事件?代码如下:

        public class TestClass : FrameworkElement

        {

            private VisualCollection _col;

            private DrawingVisual _dv = new DrawingVisual();

            public TestClass()

            {

                _col = new VisualCollection(this);

                //DrawingContext dc = _dv.RenderOpen();

                //dc.DrawRectangle(Brushes.Black, null, new Rect(0, 0, 500, 500));    

                //dc.Close(); 

                _col.Add(_dv);

            }

            protected override int VisualChildrenCount

            {

                get { return _col.Count; }

            }

            protected override Visual GetVisualChild(int index)

            {

                if (index < 0 || index >= _col.Count)

                {

                    throw new ArgumentOutOfRangeException();

                }

                return _col[index];

            }

            protected override void OnMouseDown(MouseButtonEventArgs e)

            {

                this.CaptureMouse();

                Point pt = e.GetPosition(this);

                Console.WriteLine("-----");  

            }

        }

    2011年9月2日 2:15

答案

  • 如果你没有任何Visual的元素是不会接受HitTest的,所以你的MouseDown事件也就不会触发,你必须要添加可视内容,才能有元素去接受HitTest。

    而且像ge.lee说的,必须要给个背景色,如果你添加的元素没有设置背景,也是不会接受HitTest的,比如:

      DrawingContext dc = _dv.RenderOpen();

     dc.DrawRectangle(null, null, new Rect(0, 0, 500, 500));    

     dc.Close(); 

    这样是不行的。可以设置成Brushes.Transparent。

     


    Sheldon _Xiao[MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.


    2011年9月5日 6:57
    版主

全部回复

  • 没东西时的组件大小默认为0,在这个范围内当然不会有鼠标消息出现了,试试设定一个初始的宽度和高度
    2011年9月2日 3:05
  • 设置了其height以及width 也不行
    2011年9月2日 3:40
  • 给你这个加个透明背景试试?没有内容,点上去,点到最顶层了
    2011年9月5日 2:09
  • 如果你没有任何Visual的元素是不会接受HitTest的,所以你的MouseDown事件也就不会触发,你必须要添加可视内容,才能有元素去接受HitTest。

    而且像ge.lee说的,必须要给个背景色,如果你添加的元素没有设置背景,也是不会接受HitTest的,比如:

      DrawingContext dc = _dv.RenderOpen();

     dc.DrawRectangle(null, null, new Rect(0, 0, 500, 500));    

     dc.Close(); 

    这样是不行的。可以设置成Brushes.Transparent。

     


    Sheldon _Xiao[MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.


    2011年9月5日 6:57
    版主