动态添加的控件不会出现在预期的位置

时间:2012-03-28 20:02:39

标签: c# wpf

我的页面上有一个网格。

根据ComboBox的选择,我动态添加一个具有ContextMenu的适当GridView(到目前为止一直很好)。

其中一个ContextMenuItem选项需要用户输入,因此我动态构建并向Grid添加控件,并将Grid作为Grid的子节点添加到页面上(同时隐藏Grid的第一个子节点( GridView的))。

控件未出现在预期位置。如果我指定0,0,0,0它们出现在中间的某个地方。如果我指定-800,-400,0,0,它们会显示在我想要的位置附近,但不是预期的位置(网格本身是800x400)。

我错过了什么吗?

我尝试过添加列和行并指定位置。我已经尝试直接设置控件的边距。似乎没有什么能像预期的那样发挥作用。

由于

2 个答案:

答案 0 :(得分:1)

如果准确定位控件,则应使用CanvasGrid旨在相对定位控件,而看起来你正试图绝对定位它们(​​在Grid内)。

答案 1 :(得分:0)

要定位控件,您可以通过多种方式执行此操作。您应该使用Canvas元素而不是Grid,并在要定位的控件中设置LeftTop属性。 在XAML中示例以在(30,10)中放置按钮

<Canvas>
    <Button x:Name="sampleButton" 
            Width="30" Height="20" 
            Canvas.Left="30" 
            Canvas.Top="10"/>
</Canvas>

代码背后的示例:

...
Canvas.SetLeft(sampleButton, 30);
Canvas.SetTop(sampleButton, 10);
...

但是,如果您需要使用Grid(出于某种原因),可以将HorizontalAlignment设置为Left,将VerticalAlignment设置为TopWidthHeight的适当值以及THEN将边距设置为 x,y,0,0 。 示例代码:

<Grid>
    <Button x:Name="sampleButton" 
            HorizontalAlignment="Left" 
            VerticalAlignment="Top" 
            Width="30" Height="20" 
            Margin="30, 10, 0, 0"/>
</Grid>