动态添加的控件未出现在预期位置
本文关键字:位置 添加 控件 动态 | 更新日期: 2023-09-27 18:29:14
我有一个带有网格的页面。
根据组合框的选择,我动态添加了一个合适的GridView,它有一个ContextMenu(到目前为止还不错)。
其中一个ContextMenuItem选项需要用户输入,因此我动态地构建控件并将其添加到网格中,并将网格添加为页面上网格的子级(同时隐藏网格的第一个子级(GridView))。
控件未出现在预期位置。如果我指定0,0,0,0,它们会显示在中间的某个位置。如果我指定-800、-400、0,0,它们会显示在我想要的位置附近,但不会显示在预期的位置(网格本身是800x400)。
我是不是错过了什么?
我尝试过添加列和行,并以这种方式指定位置。我试过直接设置控件的边距。似乎没有什么能像预期的那样奏效。
感谢
如果要精确定位控件,则应该使用Canvas
。Grid
被设计为相对地定位控件,而看起来您正试图绝对地(在Grid
中)定位控件。
要定位控件,可以通过多种方式进行定位。应该使用Canvas
元素而不是Grid
,并在要定位的控件中设置Left
和Top
属性。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
设置为Top
,为Width
和Height
指定适当的值,然后将Margin设置为x,y,0,0。示例代码:
<Grid>
<Button x:Name="sampleButton"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Width="30" Height="20"
Margin="30, 10, 0, 0"/>
</Grid>