如何在TemplateSelector中获取WPF DataGrid的活动行
我有一个WPF数据网格,有三列。前两列是DataGridComboBox列。第三列是包含ContentControl的模板列。我想使用此Datagrid作为高级搜索的数据输入表单。第一列将与数据库中文档的属性列表绑定,如DocumentName、OwnerName、DateCreated等。第二列将是运算符列表。此.documentPropertyGrid.Columns的类型是什么[2].GetCellContentrow是否显示为内容控件?我在datagrid的template列的datatemplate内的内容控件中指定了默认值1。您可以在上面给出的Xaml中看到以下声明:1。加载页面时,1的值在单元格[2]中显示。因此,我希望它是一个值为1的空内容控件。我的意思是当您在this.documentPropertyGrid.Columns[2].GetCellContentrow这行上放置断点时,您在监视中看到了什么值。documentPropertyGrid.Columns[2].GetCellContentrow?无效的一串UIElement?此.documentPropertyGrid.Columns[2]的值。GetCellContentrow作为ContentPresenter返回。有趣!我不知道为什么调用会返回ContentPresenter,但它是ContentControl的ControlTemplate的核心。DataGridCell本身是一个ContentControl,因此您放入其中的另一个ContentControl被假定为ContentPresenter。如果它不会对您造成伤害,那么您可以从ContentPresenter本身提取所有基于内容的属性content、ContentTemplate、ContentTemplateSelector、ContentStringFormat、ContentSource!。。。此.documentPropertyGrid.Columns[2].GetCellContentrow在未显示为内容控件时的类型是什么?我在datagrid模板列的datatemplate内的内容控件内指定了默认值1。您可以在上面给出的Xaml中看到以下声明:1。加载页面时,1的值在单元格[2]中显示。因此,我希望它是一个值为1的空内容控件。我的意思是当您在this.documentPropertyGrid.Columns[2].GetCellContentrow这行上放置断点时,您在监视中看到了什么值。documentPropertyGrid.Columns[2].GetCellContentrow?无效的一串UIElement?此.documentPropertyGrid.Columns[2]的值。GetCellContentrow作为ContentPresenter返回。有趣!我不知道为什么调用会返回ContentPresenter,但它是ContentControl的ControlTemplate的核心。DataGridCell本身是一个ContentControl,因此您放入其中的另一个ContentControl被假定为ContentPresenter。如果它不会对您造成伤害,那么您可以从ContentPresenter本身提取所有基于内容的属性content、ContentTemplate、ContentTemplateSelector、ContentStringFormat、ContentSource!。。。如何在TemplateSelector中获取WPF DataGrid的活动行,wpf,datagrid,datatemplate,contentcontrol,Wpf,Datagrid,Datatemplate,Contentcontrol,我有一个WPF数据网格,有三列。前两列是DataGridComboBox列。第三列是包含ContentControl的模板列。我想使用此Datagrid作为高级搜索的数据输入表单。第一列将与数据库中文档的属性列表绑定,如DocumentName、OwnerName、DateCreated等。第二列将是运算符列表。此.documentPropertyGrid.Columns的类型是什么[2].GetCellContentrow是否显示为内容控件?我在datagrid的template列的datat
public class DocumentSearchProperty
{
public string PropertyName { get; set; }
public string Operator { get; set; }
public string PropertyValue { get; set; }
}
<DataGrid AutoGenerateColumns="False" Width="Auto" Name="documentPropertyGrid"
ItemsSource="{}"
SelectionMode="Single" CanUserAddRows="True" CanUserDeleteRows="True" CanUserResizeColumns="True" CanUserSortColumns="True"
CanUserResizeRows="False" FrozenColumnCount="0" HorizontalContentAlignment="Stretch" HorizontalAlignment="Stretch" RowHeaderWidth="0"
AlternatingRowBackground="Gainsboro" AlternationCount="2" VerticalContentAlignment="Stretch" VerticalAlignment="Top" VerticalScrollBarVisibility="Auto">
<DataGrid.Columns>
<DataGridComboBoxColumn x:Name="columnProperty" ItemsSource="{}" SelectedItemBinding="{Binding Path=Id}"
Header="Property" Width="170"/>
<DataGridComboBoxColumn x:Name="columnOperator" ItemsSource="{}" SelectedItemBinding="{Binding Path=value}" Header="Operator" Width="170" />
<DataGridTemplateColumn x:Name="PropertyValue" Header="Value" Width="100">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ContentControl x:Name="CntControl">
<ContentControl.Content>1</ContentControl.Content>
</ContentControl>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
DataGridRow row = this.documentPropertyGrid.ItemContainerGenerator.ContainerFromIndex(this.documentPropertyGrid.SelectedIndex) as DataGridRow;
ComboBox ele = this.documentPropertyGrid.Columns[0].GetCellContent(row) as ComboBox;
ContentControl contentControl = this.documentPropertyGrid.Columns[2].GetCellContent(row) as ContentControl;
ContentPresenter contentPresenter = this.documentPropertyGrid.Columns[2].GetCellContent(row) as ContentPresenter;
DataTemplate dt = new DataTemplate();
switch (propertyName)
{
case "DocumentName":
dt = this.FindResource("AutoCompleteBoxTemplate") as DataTemplate;
break;
case "DateCreated":
case "DateModified":
case "DateAccessed":
dt = this.FindResource("DatePickerTemplate") as DataTemplate;
break;
default:
dt = this.FindResource("AutoCompleteBoxTemplate") as DataTemplate;
break;
}
contentPresenter.ContentTemplate = dt;