在自定义DrawingVisual Object UIElement上获取mouseclick事件时遇到问题

穆留利马德哈夫

我正在尝试使用MouseButtonEventHandler在画布中添加drawingvisual对象。但无法获得点击事件。我在这里做错了什么?

public class VisualHost : UIElement
    {

        public Visual myVisual { get; set; }

        public VisualHost()
        {
            Visibility = Visibility.Visible;
            IsHitTestVisible = true;
            MouseLeftButtonUp += new MouseButtonEventHandler(MyVisualHost_MouseLeftButtonUp);
        }

        protected override int VisualChildrenCount
        {
            get { return myVisual != null ? 1 : 0; }
        }

        protected override Visual GetVisualChild(int index)
        {
            return myVisual;
        }

       //mouse event
        private void MyVisualHost_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            MessageBox.Show("You clicked a drawing-Visual");

        }
    }


 private void AddMyVisualObject()
    {
        GeometryDrawing myRectDrawing = new GeometryDrawing(Brushes.Yellow, new Pen(Brushes.White, 1.5), new RectangleGeometry(new Rect(0, 0, 200, 100)));
        DrawingVisual myDV = new DrawingVisual();
        DrawingContext myDC = myDV.RenderOpen();
        myDC.DrawDrawing(myRectDrawing);
        myDC.Close();
        VisualHost myVH = new VisualHost { myVisual = myDV };
        myDrawingCanvas.Children.Add(myVH);
    }

请帮助,在单击DrawingVisual时如何触发事件?

仿生代码

您必须使用aVisualCollection来托管您的Visual元素,并另外自己对它们进行命中测试:

public class VisualHost : FrameworkElement
{
  private VisualCollection Children { get; set; }

  public VisualHost()
  {
    this.Children = new VisualCollection(this);
    this.MouseLeftButtonUp += MyVisualHost_MouseLeftButtonUp;
  }

  public void AddChild(Visual visual)
  {
    this.Children.Add(visual);
  }

  protected override int VisualChildrenCount => this.Children.Count;

  protected override Visual GetVisualChild(int index) => this.Children[index];

  //mouse event
  private void MyVisualHost_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
  {
    // Initiate the hit test by setting up a hit test result callback method.
    VisualTreeHelper.HitTest(this, null, OnVisualClicked, new PointHitTestParameters(e.GetPosition((UIElement) sender)));
  }

  private HitTestResultBehavior OnVisualClicked(HitTestResult result)
  {
    if (result.VisualHit.GetType() == typeof(DrawingVisual))
    {
      MessageBox.Show("You clicked a DrawingVisual");   
    }

    // Stop the hit test enumeration of objects in the visual tree.
    return HitTestResultBehavior.Stop;
  }
}

然后初始化主机:

private void AddMyVisualObject()
{
  GeometryDrawing myRectDrawing = new GeometryDrawing(Brushes.Yellow, new Pen(Brushes.White, 1.5), new RectangleGeometry(new Rect(0, 0, 200, 100)));
  DrawingVisual myDV = new DrawingVisual();
  DrawingContext myDC = myDV.RenderOpen();
  myDC.DrawDrawing(myRectDrawing);
  myDC.Close();

  VisualHost myVH = new VisualHost();
  myVH.AddChild(myDV);
  this.Canvas.Children.Add(myVH);
}

有关更多信息,请参见MSDN

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

创建自定义MKAnnotationView时遇到问题

归档自定义对象时遇到问题

自定义事件问题

导入自定义包和模块时遇到问题?

在“设计”注册表单中添加“自定义”字段时遇到问题

使用xml导出和导入自定义类型对象时遇到问题

我在 ListView android 中显示我的自定义对象时遇到问题

我想在 Kotlin 中自定义我的新按钮时遇到问题

按从 Enum 获取的值按自定义顺序对 List<Object> 进行排序

Django-如何使用get_object_or_404获取自定义用户模型

如何为 Typescript 中的 Object.values 获取的数组键提供自定义类型?

我将[<object> description]作为参数传递时,自定义的NSLog生成错误

当对象类型包括基元和自定义类时,避免使用ArrayList <object>?

在尝试使用自定义适配器在自定义待办事项列表中实现CheckBox时遇到问题?

制作Firefox的自定义版本时遇到的问题

将 Angular 10 与 Spring security 连接以使用自定义登录页面时遇到问题

在将配置读取和加载到ASP.NET Core中的自定义对象中时遇到问题

Django-使用自定义用户模型将用户添加到用户组时遇到问题

我在尝试将上传媒体按钮添加到自定义元框时遇到问题

使用切换 SwiftUI 更改自定义类的布尔值时遇到问题

自定义事件触发

自定义事件ID

自定义JavaFX事件

自定义UserControl事件

QThread自定义事件

为自定义指令编写自定义事件

自定义光标问题

自定义分区问题

自定义异常的问题