我有一些要导入 PowerShell 脚本的 XAML。它包含一个DataGrid
显示 PowerShell cmdlet 的结果。我使用DataGridTemplateColumn
. 现在,我想为每个按钮添加一个事件处理程序。我可以在代码中做到这一点:
$adUsersList_Results = $activeDirectory_Users_ListControl.FindName('ResultsDataGrid')
$dataTemplate = New-Object 'Windows.DataTemplate'
$buttonElement = New-Object 'Windows.FrameworkElementFactory' ([Windows.Controls.Button])
$buttonElement.SetValue([Windows.Controls.Button]::ContentProperty, "Edit")
$buttonElement.AddHandler([Windows.Controls.Button]::ClickEvent, [Windows.RoutedEventHandler]{
PARAM (
[Object]$sender,
[Windows.RoutedEventArgs]$e
)
Write-Host "Clickety-click!"
Write-Host $sender.DataContext
})
$dataTemplate.VisualTree = $buttonElement
$dataGridTemplateColumn = New-Object 'Windows.Controls.DataGridTemplateColumn'
$dataGridTemplateColumn.Header = 'Poo'
$dataGridTemplateColumn.CellTemplate = $dataTemplate
$adUsersList_Results.Columns.Add($dataGridTemplateColumn)
但这有点笨拙。XAML 如下所示:
<DataGrid Grid.Row="1"
x:Name="ResultsDataGrid"
IsReadOnly="True"
HorizontalAlignment="Stretch"
Margin="3"
VerticalAlignment="Stretch">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="Edit" Width="60" x:Name="ADUserListButton"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
我试过使用 FindName('ADUserListButton') 但它不起作用。有没有办法在 XAML 中保留所有视觉内容并在 PowerShell 中执行事件处理程序?
旁白:我知道 Show-UI。在决定哪个最适合我们之前,我实际上在 Show-UI 和 PowerShell & XAML 中做同样的事情。
我也知道您可以在网格中进行编辑,但我认为这对于此类数据来说并不是一个很好的用户体验。