网格中奇怪的WPF对齐

时间:2016-02-11 09:20:37

标签: .net wpf layout

我试图在空椭圆内画一个填充的椭圆(就像一个无线电按钮),整个过程都是可扩展的。

我已经尝试过这种方式(网格看起来很有必要,如果我使用边框,那么比例也不会看起来相同)

<Grid Background="White">
    <Grid.RowDefinitions>
        <RowDefinition Height="2*" />
        <RowDefinition Height="5*" />
        <RowDefinition Height="2*" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="2*" />
        <ColumnDefinition Width="5*" />
        <ColumnDefinition Width="2*" />
    </Grid.ColumnDefinitions>
    <Ellipse Stroke="Black" StrokeThickness="3" Grid.RowSpan="3" Grid.ColumnSpan="3"></Ellipse>
    <Ellipse StrokeThickness="0" Fill="Red" Grid.Row="1" Grid.Column="1" />
</Grid>

当控件为30x30时,填充的椭圆看起来不居中,有一个小的偏移(看起来像是从右下角靠近)。 如果我将2-5-2改为1-2-1,它会从左上角看起来更近。

知道它为什么会这样表现吗?更重要的是,我怎样才能真正给它一个更加对称的外观?

提前感谢(对不起我的英语不好)寻求帮助。 (顺便说一句,我使用.Net FW 4.5)

2 个答案:

答案 0 :(得分:0)

据我所知,这是因为您的测量结果。您已经说过控件应该是30x30,但是然后您将其分开以使得无法均匀分布:50%到中间列(15个像素)留下15个像素以均匀分布在其他两列之间,不能均匀地完成。

我的建议是将测量设置为更友好的东西,例如32x32(当我尝试时这似乎工作正常并且是典型的方法) - 但是如果你需要它可以真正扩展到任何大小,也许设置一些属性让你的对象忽略&#34;舍入&#34;当元素在像素之间时,WPF会这样做,这是我的建议:

MSDN UseLayoutRounding

MSDN PixelSnapping

尝试在网格和省略号上设置这些。

答案 1 :(得分:0)

我刚刚将RowDefinitions的高度和宽度从2改为3,这似乎完成了这项工作。

width

似乎可以解决这个问题,但如果要使用大于30x30的控件,可能不是一个好的解决方法