【发布时间】:2014-08-01 22:20:02
【问题描述】:
我将一些 XAML 导入到 PowerShell 脚本中。它包含一个 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 中做同样的事情。
我也知道您可以在网格中进行编辑,但我认为对于此类数据而言,这不是很好的用户体验。
【问题讨论】:
标签: wpf xaml powershell datagrid powershell-4.0