WPF将许多项加载到Grid并显示在新的可用行/列上

时间:2013-02-14 08:16:44

标签: wpf grid

我在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网格上显示,当添加一个新控件时,它会超过那里的控件。 /> 如何在网格上的空位设置控件?

2 个答案:

答案 0 :(得分:1)

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

        Grid.SetRow(control, row);
        Grid.SetColumn(control, column);

答案 1 :(得分:1)

您只需将控件的Grid.ColumnGrid.Row设置为每个空格。

但是我注意到你将所有Grid Columns / Rows设置为相同的大小,所以也许UniformGrid会是一个更好的选择

的Xaml:

<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);
        }
    }
}