以编程方式在网格中设置 Dockpanel 大小

Set Dockpanel size in grid programmatically

我的目标是以编程方式设置 DockPanel 大小。 我希望它跨越 Grid.Column=1、Grid.Row=1、Grid.RowSpan=5

而且我知道在 xaml 中静态设置它很热,但在 c# 中不行。

代码说明: 在 xaml 中,我制作了一个 1 行 1 列的网格,其中包含一些文本字段和 DockPanel 中的一个按钮。当我按下按钮时,它应该创建一个网格,其中的 column/rows 与我在文本字段中所写的一样多。然后命名每一列和每一行。并且知道我想在其中一些字段上创建一个 Dockpanel,但为此我必须定义它的开始位置和跨度。这就是问题所在。

这是我的 xaml 代码:

<Grid Name="MainWindowGrid">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Name="DockPanel"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition/>
    </Grid.RowDefinitions>

    <DockPanel Background="LightSalmon" Grid.Row="0" Grid.Column="0" Grid.RowSpan="8">
        <StackPanel>
            <TextBox Name="txtColums" Text="16"/>
            <TextBox Name="txtRows" Text="8"/>
            <TextBox Name="txtWindowHeight" Text="800"/>
            <TextBox Name="txtWindowWidth" Text="1600"/>

            <Button x:Name="ButtonCreate" Content="Create" Click="ButtonCreate_Click"/>
        </StackPanel>
    </DockPanel>
    <ContentControl Content="{Binding}"/>
</Grid>

我的 C# 代码是我目前拥有的:

Methods Methods = new Methods();
Methods.CreateField(MainWindowGrid, txtColums, txtRows, txtWindowHeight, txtWindowWidth, MainWindow1);

int GridColumnCount = MainWindowGrid.ColumnDefinitions.Count;
int GridRowCount = MainWindowGrid.RowDefinitions.Count;

for (int a = 1; a < GridColumnCount; a++)
{
    MainWindowGrid.ColumnDefinitions.ElementAt(a).Name = "C" + a;
}
for (int a = 1; a < GridRowCount; a++)
{
    MainWindowGrid.RowDefinitions.ElementAt(a).Name = "R" + a;
}

var converter = new System.Windows.Media.BrushConverter();
var brush1 = (Brush)converter.ConvertFromString("#FFFFFFF0");
DockPanel myDockPanel = new DockPanel();
myDockPanel.Background = brush1;
myDockPanel.

最后,我希望能够设置 row/column 停靠面板应该在哪个位置,然后跨越它,但遗憾的是我不知道该怎么做。

您可以使用以下方法设置 myDockPanelGrid.ColumnGrid.RowGrid.RowSpan 附加属性:

Grid.SetColumn(myDockPanel, 1); //= <DockPanel ... Grid.Column = "1"
Grid.SetRow(myDockPanel, 1); //= <DockPanel ... Grid.Row = "1"
Grid.SetRowSpan(myDockPanel, 8); //= <DockPanel ... Grid.RowSpan = "8"