如何使边距相对于UIElement的中心而不是网格的左上角?

时间:2012-04-06 22:22:33

标签: wpf grid margin uielement

我希望Margin属性引用UIElement的中心,而不是左上角。这样当我改变UIElement的宽度/高度时,它就会停留在同一个位置。

有没有办法配置这种行为,或者我必须依靠Binding来进行调整?

感谢。

例如,如果我更改以下矩形的Width/Height,其中心将移动。

<Grid>
    <Rectangle Fill="#FF991C1C" Width="10" Height="40" HorizontalAlignment="Left" Margin="90,161,0,0" VerticalAlignment="Top"/>
</Grid>

3 个答案:

答案 0 :(得分:2)

为什么不删除边距,并使用这些?

HorizontalAlignment="Center"
VerticalAlignment="Center"

答案 1 :(得分:1)

由于一个不明原因,如果我想让边距相对于中心,我无法弄清楚矩形对齐应该是中心。 这段代码使我的Rectangle表现得像我想要的那样。

<Grid>
    <Rectangle Fill="#FF991C1C" Width="10" Height="40" HorizontalAlignment="Center" Margin="90,161,0,0" VerticalAlignment="Center"/>
</Grid>

答案 2 :(得分:-1)

在某些情况下,当尝试仅使用单个margin属性根据元素的中心而不是边缘定位元素时,我发现此解决方案很有用:

/* Declare a CSS variable equal to your element's width. */

:root{
   --my-element-width: 40px;
}

/* Declare your margin as 50% minus half the element's width */

.myClass {
  margin-right: calc(50% - var(--my-element-width));
}

/* Apply this class to the element in question. */