Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在TemplateSelector中获取WPF DataGrid的活动行_Wpf_Datagrid_Datatemplate_Contentcontrol - Fatal编程技术网

如何在TemplateSelector中获取WPF DataGrid的活动行

如何在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

我有一个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!。。。
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;