использование Powershell для размещения элемента управления wpf в сетке - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть ситуация, когда мне нужно иметь возможность программно сгенерировать элемент управления и поместить его в сетку.

Если я предварительно создаю элемент управления в 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

}

1 Ответ

0 голосов
/ 04 декабря 2018

Чтобы установить такие свойства, используйте статический метод в родительском классе:

[System.Windows.Controls.Grid]::SetRow($label,0)
[System.Windows.Controls.Grid]::SetColumn($label,1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...