2012-03-28 45 views
0

我有一个带有网格的页面。动态添加的控件没有出现在预期的位置

基于组合框的选择,我动态地添加一个合适的具有ContextMenu的GridView(迄今为止很好)。

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

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

我错过了什么吗?

我试过添加列和行并指定位置。我试着直接设置控件的边距。似乎没有预期的那样工作。

感谢

回答

1

你应该使用Canvas如果你恰好定位控制。 A Grid旨在相对定位控件,而它看起来像是试图将它们绝对定位(在Grid内)。

+0

谢谢。这工作。 – user1299040 2012-03-29 18:03:32

0

要定位控件,您可以通过多种方法来完成。您应该使用Canvas元素代替Grid,并在您要定位的控件中设置LeftTop属性。在代码

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

样品背后: 样品在XAML定位在按钮(30,10)

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

如果,但是,需要使用Grid(出于某种原因),您可以设置HorizontalAlignmentLeftVerticalAlignmentTop,为WidthHeight指定合适的值,然后设置页边距来X,Y,0,0。 示例代码:

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

我一直在使用Horizo​​ntalAlignment和VerticalAlignment,并没有帮助。我没有理由不使用Canvas。这似乎工作。 – user1299040 2012-03-29 18:03:06

+0

它在定义了控件的'Grid'的单元格内工作。在我的例子中,有一行和一列的“Grid”,所以它就像整个Grid容器一样工作。如果你在'Grid'中定义了一些行和列,你应该考虑这个。 – 2012-03-29 19:16:02