【问题标题】:Connecting two shapes together, Silverlight 2将两个形状连接在一起,Silverlight 2
【发布时间】:2009-01-22 03:21:02
【问题描述】:

我希望用一条线将两个形状或对象连接或粘合在一起。这些形状将动态生成,这意味着我将在后端调用 Web 服务来确定需要创建多少对象/形状。确定后,我需要将对象/形状连接在一起。

方法签名可能如下所示(类似于 Visio 的绘图功能):

GlueTogether(objButton1, objButton2);

我可能需要获取每个 Rectangle 形状或 Button 的位置来确定起始 Line 点的位置。然后确定绘制线条的第二个形状/对象位置。

任何帮助或建议都会很棒!

【问题讨论】:

    标签: c# wpf silverlight expression


    【解决方案1】:
    1. 在堆叠顺序或 z 索引中的形状下方使用路径或线条
    2. 使用 instance.TransformToVisual() 获取每个形状的变换
    3. 使用变换来变换每个形状的中心点
    4. 在两个中心点之间画一条线。

    var transform1 = shape1.TransformToVisual(shape1.Parent as UIElement);
    var transform2 = shape2.TransformToVisual(shape2.Parent as UIElement);
    
    var lineGeometry = new LineGeometry()
    {
      StartPoint = transform1.Transform(new Point(shape1.ActualWidth / 2, shape1.ActualHeight / 2.0)),
      EndPoint = transform2.Transform(new Point(shape2.ActualWidth / 2.0,    shape2.ActualHeight / 2.0))
    };
    
    var path = new Path()
    {
    Data = lineGeometry
    };
    

    【讨论】:

    • .FindCommonVisualAncestor 如果你的形状嵌套在不同的地方很方便 -- shape1.TransformToVisual(shape1.FindCommonVisualAncestor(shape2))
    【解决方案2】:

    我的尝试大致相同,但不是从一个中心到另一个中心的线,我希望这些线停在两个形状的边缘。 特别是我在线条的末端有箭头,箭头需要停在形状的边界处,而不是在形状的内部/后面到达它的中心。

    我的形状是一个带有网格和矩形的用户控件,以及一些标签和其他东西。 我找不到任何方法可以为我提供形状边缘的几何形状(圆角矩形)。

    我想出了一个解决方案,它使用边界框和交点通过线在其近似边缘处连接我的元素,并且使用箭头结束的线对我来说效果很好。

    Connecting two WPF canvas elements by a line, without using anchors?

    【讨论】:

      【解决方案3】:

      看看这个:http://www.graphspe.com/Main.aspx#/Solution/graphviz-xaml-renderer

      您所要做的就是将 printf 打印到一个字符串,然后您就可以得到 Silverlight[2|3] 图。

      齐洪

      【讨论】:

      • 链接错误 - 我得到一个“正在建设的页面”
      【解决方案4】:

      此外...我没有连接到对象的中心点,而是将 Michael S. 的相同代码修改为:

      var lineGeometry = new LineGeometry()
      {
          StartPoint = transform1.Transform(new Point(1 , b1.ActualHeight / 2.0)),
          EndPoint = transform2.Transform(new Point(b2.ActualWidth , b2.ActualHeight / 2.0))
      };
      

      这将在每个对象的外部连接。

      【讨论】:

        【解决方案5】:

        我正在使用上面的代码来绘制两个按钮,我想在这两个按钮之间画一条线,但我得到的只是两个看起来像小圆圈并且没有线的按钮。

        代码:

        Button b1 = new Button();
        Button b2 = new Button();
        canvas1.Children.Add(b1);
        canvas1.Children.Add(b2);
        Canvas.SetLeft(b1, 300);
        
        var transform1 = b1.TransformToVisual(b1.Parent as UIElement);
        var transform2 = b2.TransformToVisual(b2.Parent as UIElement);
        
        var lineGeometry = new LineGeometry()
        {
            StartPoint = transform1.Transform(new Point(1, b1.ActualHeight / 2.0)),
            EndPoint = transform2.Transform(new Point(b2.ActualWidth, b2.ActualHeight / 2.0))
        };
        
        var path = new Path()
        {
            Data = lineGeometry
        };
        
        canvas1.Children.Add(path);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-01-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多