У меня есть ситуация, когда мне нужно иметь возможность программно сгенерировать элемент управления и поместить его в сетку.
Если я предварительно создаю элемент управления в xaml, это довольно просто:
<Grid ShowGridLines="True" Name='NewGrid'>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" Name="Row1" />
<RowDefinition Height="Auto" Name="Row2"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" Name="col1"/>
<ColumnDefinition Width="Auto" Name="col2"/>
</Grid.ColumnDefinitions>
<Label
Name='Buttonlabel'
HorizontalAlignment='Left'
Content="ButtonLabel"
VerticalAlignment='Top'
FontWeight="Bold"
Grid.Row="0"
Grid.Column="1"/>
</Grid>
Это поместит мой ярлык в строку «0» и столбец «1».Но если у меня есть функция в Powershell, которая генерирует метку, у меня нет возможности разместить метку в Grid.Row = '0', Grid.Column = '1'.поскольку свойства местоположения не существуют естественным образом при создании ярлыка следующим образом:
$label = New-Object System.Windows.Controls.Label
$label.Name = 'ButtonLabel'
$label.Content = 'ButtonLabel'
$label.HorizontalAlignment ='Left'
$label.VerticalAlignment ='top'
$label.FontWeight ='Bold'
$label.Grid.Row = '0' (error property not found)
$label.Grid.Column = '1' (error property not found)
Есть идеи о том, как поместить элемент в сетку, подобную этой?
ОБНОВЛЕНИЕ С РЕШЕНИЕМ
Вот полная (рабочая) функция, в которой я вызываю ее на случай, если кому-то понадобится образец:
Function CreateRow{
$grd = New-Object system.windows.controls.grid
$grd.Name = "InnerGrid"
$grd.ShowGridLines = 'True'
$row1 = new-object system.windows.controls.rowdefinition
$row1.height = "Auto"
$row2 = new-object system.windows.controls.rowdefinition
$row2.height = "Auto"
$col1 = new-object system.windows.controls.columndefinition
$col1.width = "Auto"
$col2 = new-object system.windows.controls.columndefinition
$col2.width = "Auto"
$grd.RowDefinitions.add($row1)
$grd.RowDefinitions.add($row2)
$grd.ColumnDefinitions.add($col1)
$grd.ColumnDefinitions.add($col2)
$NewButton = New-Object System.Windows.Controls.Label
$NewButton.Content = "Label " + $counter
$NewButton.Name = "FirstLabel"
[System.Windows.Controls.Grid]::SetRow($NewButton,0)
[System.Windows.Controls.Grid]::SetColumn($NewButton,1)
$grd.AddChild($NewButton)
$NewButton2 = New-Object System.Windows.Controls.Label
$newButton2.Name = "SecondLabel"
$NewButton2.Content = "Label " + ($counter + 2 )
[System.Windows.Controls.Grid]::SetRow($NewButton2,1)
[System.Windows.Controls.Grid]::SetColumn($NewButton2,0)
$newButton2.HorizontalAlignment = 'Right'
$grd.AddChild($NewButton2)
return $grd
}