给定一个System.Windows.Controls.Control,如何找到控件的左上角和右下角(以像素为单位)?另外,我怎样才能设置上述角落?我想根据当前的位置任意调整大小或移动控件。我在C#。
感谢。
答案 0 :(得分:2)
您可以使用TransformToVisual获取Visual相对于另一个Visual的位置。例如,如果child
是您的控件,而parent
是父级,例如Window:
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指出的那样,有一些方法可以设置元素的位置,即使它不在Canvas中。一个是设置Margin。元素将向下移动Margin.Top,向右移动Margin.Left(尽管它也会变小)。您甚至可以将边距的组件设置为负值,以使元素在任何一侧溢出其容器。
另一种方式是使用RenderTransform或LayoutTransform。从文档“LayoutTransform忽略TranslateTransform操作”,但你仍然可以使用RenderTransform:
child.RenderTransform = new TranslateTransform(left, top);
如果您正在设计UI以允许明确定位元素,您可能会发现将Canvas添加到父级并将可移动元素添加到Canvas更容易。
答案 1 :(得分:1)