我是WPF开发的新手。我想创建一个包含以下列的WPF数据网格:CheckBox列,文本列,按钮列,核对表框下拉列和组合框下拉列。我还需要在清单框下拉列中添加监听器。我使用Infragistics Ultragrid在winforms中创建了相同的内容。它看起来像这样:
我读到了使用DataGridTemplateColumn在wpf中向datagrid添加一些自定义控件,但我不确定如何实现它。模板可以采用Combobox和Checklistbox吗?一个简短的代码示例会很棒。我是否必须使用infragistics或者是否可以使用WPF标准控件实现此UI?
对此有任何帮助将不胜感激。
答案 0 :(得分:2)
您可以使用标准WPF控件完成此操作。这是WPF最重要的部分之一 - 它非常灵活(通常没有太多努力)。这是一个让你指向正确方向的例子:
<DataGrid AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridCheckBoxColumn Header="Selected"/>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="Click Me!"
Command="{Binding myItemCommand}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Task"
Binding="{Binding TaskText}"/>
<DataGridTextColumn Header="Resources"
Binding="{Binding ResourcesText}"/>
<DataGridComboBoxColumn ItemsSource="{Binding AvailableStatuses}"
SelectedItemBinding="{Binding SelectedStatus}"
Header="Status" />
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<DataGrid ItemsSource="{Binding Resources}">
<DataGrid.Columns>
<DataGridCheckBoxColumn Binding="{Binding IsResourceUsed}"/>
<DataGridTextColumn Binding="{Binding ResourceName}"/>
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
如上所示,一旦进入标签内部,您可以在其中放置任何您想要的控件,并且每行都会重复这些控件。每个项目的绑定都与行所代表的任何对象相关联,因此如果您有一个DataGrid正在显示的任务对象列表,那么该列表中的每个任务都应具有要为TaskText,ResourcesText等绑定的属性。 p>
编辑:更新了代码段以显示RowDetailsTemplate。如果RowDetailsTemplate与其中的其他DataGrid之类的东西没有完成任务,你总是可以编写自己的多选组合框,但它可能相当复杂,因为默认方法没有我知道的好方法允许您选择多个项目。