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

本文关键字:位置 添加 控件 动态 | 更新日期: 2023-09-27 18:29:14

我有一个带有网格的页面。

根据组合框的选择,我动态添加了一个合适的GridView,它有一个ContextMenu(到目前为止还不错)。

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

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

我是不是错过了什么?

我尝试过添加列和行,并以这种方式指定位置。我试过直接设置控件的边距。似乎没有什么能像预期的那样奏效。

感谢

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

如果要精确定位控件,则应该使用CanvasGrid被设计为相对地定位控件,而看起来您正试图绝对地(在Grid中)定位控件。

要定位控件,可以通过多种方式进行定位。应该使用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设置为Top,为WidthHeight指定适当的值,然后将Margin设置为x,y,0,0。示例代码:

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