【问题标题】:WPF DataGridTemplateColumn shared template?WPF DataGridTemplateColumn 共享模板?
【发布时间】:2011-03-03 21:55:48
【问题描述】:

您好,我有一个数据网格,其中包含许多相同的 datagridtemplate 列,除了它们在模板的堆栈面板上具有不同的数据上下文。

<toolkit:DataGridTemplateColumn Header="Col 1">
                <toolkit:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel DataContext="{Binding Times[0]}">
                        <!-- the structure that I want to extract to a template -->
                        </StackPanel>
                    </DataTemplate>
                </toolkit:DataGridTemplateColumn.CellTemplate>
</toolkit:DataGridTemplateColumn>

<toolkit:DataGridTemplateColumn Header="Col 2">
                <toolkit:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel DataContext="{Binding Times[1]}">
                        <!-- the same structure here -->
                        </StackPanel>
                    </DataTemplate>
                </toolkit:DataGridTemplateColumn.CellTemplate>
</toolkit:DataGridTemplateColumn>

我想让每一列都使用一个特定的项目模板(就像我使用列表框所做的那样),但除非我遗漏了一些东西,否则我似乎看不到怎么做。

【问题讨论】:

    标签: wpf datagrid datagridtemplatecolumn


    【解决方案1】:

    您可以使用 ContentPresenter 为每列实例化一个 DataTemplate:

    <toolkit:DataGrid.Resources>
        <DataTemplate x:Key="ColumnTemplate">
            <StackPanel>
                <!-- the structure that I want to extract to a template -->
            </StackPanel>
        </DataTemplate>
    </toolkit:DataGrid.Resources>
    <toolkit:DataGrid.Columns>
        <toolkit:DataGridTemplateColumn Header="Col 1">
            <toolkit:DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ContentPresenter ContentTemplate="{StaticResource ColumnTemplate}" Content="{Binding Times[0]}"/>
                </DataTemplate>
            </toolkit:DataGridTemplateColumn.CellTemplate>
        </toolkit:DataGridTemplateColumn>
        <toolkit:DataGridTemplateColumn Header="Col 2">
            <toolkit:DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ContentPresenter ContentTemplate="{StaticResource ColumnTemplate}" Content="{Binding Times[1]}"/>
                </DataTemplate>
            </toolkit:DataGridTemplateColumn.CellTemplate>
        </toolkit:DataGridTemplateColumn>
    </toolkit:DataGrid.Columns>
    

    如果 Times 的元素都是同一类型,您也可以使用 &lt;DataTemplate DataType={x:Type YourType}&gt;,然后您就不需要在每一列上指定 ContentTemplate="{StaticResource ColumnTemplate}"

    【讨论】:

    • 谢谢,这就是我想要的。我创建了模板,但不知道用于在列中显示它的 ContentPresenter。最后一件事,你知道我可以如何改变这些模板列的背景颜色吗?再次感谢。
    • @obaylis:我认为您可以在 DataGrid 上设置 AlternatingRowBackground 属性。如果你需要更复杂的东西,你可以设置 AlternationCount,然后使用 AlternationIndex。这是一篇博客文章,描述了设置 DataGrid 样式的方法:blogs.msdn.com/b/jaimer/archive/2009/01/20/…
    猜你喜欢
    • 2011-03-12
    • 1970-01-01
    • 2013-04-04
    • 2012-04-07
    • 2014-06-12
    • 2012-05-08
    • 1970-01-01
    • 2010-10-16
    • 2011-10-28
    相关资源
    最近更新 更多