代码之家  ›  专栏  ›  技术社区  ›  Puppy

给定WPF控件的当前坐标

  •  0
  • Puppy  · 技术社区  · 15 年前

    给予系统.Windows.Controls.Control,如何找到控件的左上角和右下角(以像素为单位)?另外,我怎样才能设置所说的角落?我想根据控件当前所在的位置任意调整或移动它。我在C#。

    谢谢。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Community CDub    8 年前

    这取决于控件所在的容器。我想你在一个 Canvas ,如果你想自由移动它。

    this post position . 通过控件的相应属性可以获得的高度。 在 this post 您将看到移动元素的代码片段。

    您也可以使用Canvas以外的其他容器来执行此操作,但这将更加棘手,因为您必须使用间接值(margin)。

        2
  •  2
  •   Quartermeister    15 年前

    您可以使用 TransformToVisual . 例如,如果 child parent 是父级,如窗口:

     var point = child.TransformToVisual(parent).Transform(new Point(0, 0));
    

    你可以用 ActualHeight ActualWidth 为了得到尺寸,你可以通过将它们添加到位置来计算底部和右侧。

    控件的位置由WPF设置 Layout System ,所以不能在所有情况下都设置位置。如果您希望能够更改它,请将您的控件设置为 Canvas ,并设置附加的 Canvas.Top Canvas.Left 属性:

    Canvas.SetLeft(child, 123);
    Canvas.SetTop(child, 456);
    

    更新:正如Anvaka指出的,有几种方法可以设置元素的位置,即使它不在画布中。一是设置 Margin . 元素将下移页边空白。顶部就在旁边左边距(尽管它也会变得更小)。您甚至可以将边距的组成部分设置为负值,使元素在其容器的任何一侧溢出。

    另一种方法是 RenderTransform LayoutTransform . 在文档中,“LayoutTransform忽略TranslateTransform操作”,但您仍然可以使用RenderTransform:

    child.RenderTransform = new TranslateTransform(left, top);