3

我在我的 WPF 应用程序上创建了一个带有 4 行和列的网格来显示媒体:

        <Grid Name="ControlsGrid">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="33*" />
                <ColumnDefinition Width="33*" />
                <ColumnDefinition Width="33*" />
                <ColumnDefinition Width="33*" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="33*" />
                <RowDefinition Height="33*" />
                <RowDefinition Height="33*" />
                <RowDefinition Height="33*" />
            </Grid.RowDefinitions>
        </Grid>

从另一种方法我添加到网格中:

            WindowsFormsHost formhost = new WindowsFormsHost();
            formhost.Child = new System.Windows.Forms.Control();
            formhost.Child = control;
            ControlsGrid.Children.Add(formhost);

对象加载正常,在调试期间我看到集合的大小增加了..但是控件显示在第一个 0,0 网格上,并且当添加新控件时,它会覆盖那里的控件。
如何将控件设置在网格上的空白位置?

4

2 回答 2

1

您将需要一种方法来确定下一个空白空间,然后您需要设置网格行和列附加属性:

        Grid.SetRow(control, row);
        Grid.SetColumn(control, column);
于 2013-02-14T08:24:38.313 回答
1

您只需要设置Grid.ColumnGrid.Row让控件位于每个空间中。

但是我注意到您将所有网格列/行设置为相同的大小,所以也许 UniformGrid 会是一个更好的选择

xml:

<Window x:Class="WpfApplication16.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" Name="UI">
    <UniformGrid Name="ControlsGrid" Rows="4" Columns="4" />
</Window>

代码:

public partial class MainWindow : Window
{

    public MainWindow()
    {
        InitializeComponent();
        AddWinformControls();
    }

    private void AddWinformControls()
    {
        for (int i = 0; i < 12; i++)
        {
            WindowsFormsHost formhost = new WindowsFormsHost();
            formhost.Child = new System.Windows.Forms.Label() { Text = "Hello" };
            ControlsGrid.Children.Add(formhost);
        }
    }
}
于 2013-02-14T08:39:16.907 回答