将DataTemplate应用于Grid

3

DataTemplate 如何应用到 Grid

我在我的 Resources.xaml 文件中有一个名为 DataGrid_TemplateDataTemplate,我想将其应用于 View.xaml 中的一个 Grid


Resources.xaml

<ResourceDictionary ... >
    <DataTemplate x:Key="DataGrid_Template">
        <Grid>
            <Grid.RowDefinitions ... />
            <DockPanel ... />
            <DataGrid ... />
        </Grid>
    </DataTemplate>
</ResourceDictionary>


View.xaml

<UserControl ... >
    <Grid /> <!-- want to apply DataGrid_Template to this -->
</UserControl>

我尝试使用Grid属性TemplatedParent,但似乎这是一个只读的属性

您是想将网格用作“ItemsControl”还是更复杂的组件? - Kyeotic
请查看以下链接:https://dev59.com/qU_Sa4cB1Zd3GeqP9BNT,https://dev59.com/JE7Sa4cB1Zd3GeqP8f5O -> 您无法直接这样做。 - Clueless
@Tyrsius 我没有将Grid用作ItemsControl。请查看Resources.xaml的更新代码片段。我正在尝试使用DockPanelDataGrid - mauryat
@Clueless @Tyrsius 对不起,我在我的代码片段中打错了一个字母,把“DataTemplate”错误地输入成了“ControlTemplate”,让大家都感到困惑了。 - mauryat
1个回答

12

不能将DataTemplates应用于面板(例如Grid)。

如果您只是想将该模板放置在某个位置,则可以使用ContentControl,并通过StaticResource将其设置为ContentTemplate

ContentControl.Content需要设置为某些内容,否则不会应用ContentTemplate。如果没有真正的“内容”设置Template应该也可以工作。)


那个完美地运行了!抱歉,我在我的代码片段中打错了一个字母,可能让大家感到困惑。我本意是指 DataTemplate,但错误地输入了 ControlTemplate - mauryat
1
@user640378:如果您似乎没有使用“Content”中的任何数据,那么控件模板可能也可以起作用,您只需将其分配为“ContentControl.Template”。 - H.B.
1
如果有人想知道,这里是使用DataTemplate的XAML示例,其中GridSettingsTemplate是包含网格定义的DataTemplate的名称。将HorizontalAlignment和VerticalAlignment设置为Stretch,否则您的网格将与迁移到DataTemplate之前看起来不同: <ContentControl ContentTemplate="{StaticResource GridSettingsTemplate}" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" /> - John
1
补充一下这个答案,我还得设置Content={Binding}在ContentControl上才能让它正常工作(从这里得到了灵感https://dev59.com/KmUp5IYBdhLWcg3wRWBD#15389304)。 - Quails4Eva

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接