【问题标题】:Get element position after transform获取变换后的元素位置
【发布时间】:2011-07-13 02:19:48
【问题描述】:

我有一个 UIElement,它执行了各种转换(缩放和平移)。

有没有办法在转换后获取 UIElement 的位置?我试过GetValue(Canvas.TopProperty),但它并没有改变它加载的内容。

我一定遗漏了一些明显但不确定的东西。 (我用的是silverlight)

【问题讨论】:

    标签: c# silverlight position transform


    【解决方案1】:

    尝试使用这种方法:

    var offset = Application.RootVisual.TransformToVisual(myObject)
                                       .Transform(new Point(0,0));
    

    TransformToVisual

    【讨论】:

      【解决方案2】:

      这样做有点不直观,但可以做到。这是一个两步过程。一、你想用什么TransformToVisual函数(from MSDN):

      返回一个可用于将坐标从 UIElement 转换为指定对象的转换对象。

      TransformToVisual 将产生一个GeneralTransform,它将执行从任何 UIElement 到任何其他 UIElement 的转换(假设它们都存在于同一个可视化树中)。听起来你想要的是RootVisual的转换。

      var transform = Application.RootVisual.TransformToVisual(myUiElement);
      

      transform 对象现在是一个通用转换,可用于转换任何东西,就像myUiElement 相对于RootVisual 进行转换一样

      下一步是使用该变换来变换一个点。

      var myUiElementPosition = transform.Transform(new Point(0,0));
      

      myUiElementPosition 现在是一个 Point,它已被转换,应该是您正在寻找的 UIElement 的位置。使用new Point(0,0) 是因为我假设您希望相对于RootVisual 的左上角给出位置。

      【讨论】:

        【解决方案3】:

        编辑:

        好的,这个怎么样?

        myObjectTransform.GetValue(CompositeTransform.TranslateXProperty)
        

        myObjectTransform.GetValue(CompositeTransform.TranslateYProperty)
        

        【讨论】:

        • 我不太清楚如何使用它。目前,我正在使用 myObjectTransform.TranslateX += 2。这会将对象每帧移动 2 个。我将在哪里使用 GeneralTransform 方法?谢谢
        • @Skoder 我误解了你的设置。你可以试试编辑的sn-p吗?
        • 我得到了正确的值,但该值与元素的位置不同。该值仅与变换相关,与对象的位置无关。所以变换的位置值被更新了,但是我需要元素的位置值。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-23
        • 1970-01-01
        相关资源
        最近更新 更多