C# 是否可以在WPF中重用网格模式/模板

C# 是否可以在WPF中重用网格模式/模板,c#,wpf,xaml,templates,grid,C#,Wpf,Xaml,Templates,Grid,在我的WPF应用程序中,我想多次重用网格模板。 我为网格定义了一个数据模板(名为GrdTemplate),我想在XAML定义的几个地方使用这个模板。 如何使用网格模板 这是我的XAML代码: <Grid Height="{Binding Converter={StaticResource PercentageConverter}, ElementName=listboxItems, Path=ActualHeight, ConverterParameter=0.48}"

在我的WPF应用程序中,我想多次重用网格模板。 我为网格定义了一个数据模板(名为GrdTemplate),我想在XAML定义的几个地方使用这个模板。 如何使用网格模板

这是我的
XAML
代码:

      <Grid Height="{Binding Converter={StaticResource PercentageConverter}, ElementName=listboxItems, Path=ActualHeight, ConverterParameter=0.48}"
                      MaxWidth="{Binding Converter={StaticResource PercentageConverter}, ElementName=listboxItems, Path=ActualWidth, ConverterParameter=0.1}">
                    <Grid.Resources>
                        <Style TargetType="TextBlock" >
                            <Setter Property="TextAlignment" Value="Center" />
                            <Setter Property="Margin" Value="2,2" />
                        </Style>
                        <DataTemplate x:Key="GrdTemplate">
                            <Grid>
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="1*" />
                                    <RowDefinition Height="1*" />
                                    <RowDefinition Height="1*" />
                                    <RowDefinition Height="1*" />
                                </Grid.RowDefinitions>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="*" />
                                </Grid.ColumnDefinitions>

                                <Grid Grid.Column="0" Grid.Row="0">
                                    <Grid.RowDefinitions >
                                        <RowDefinition Height="*" />
                                    </Grid.RowDefinitions>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="8*" />
                                        <ColumnDefinition Width="5*" />
                                    </Grid.ColumnDefinitions>
                                    <TextBlock Grid.Column="0" Grid.Row="0" 
                                                   Text="{Binding Path=Tr}" />
                                    <TextBlock Grid.Column="1" Grid.Row="0" 
                                                   Text="{Binding Path=Hr}" />
                                </Grid>

                                <Grid Grid.Column="0" Grid.Row="1">
                                    <Grid.RowDefinitions >
                                        <RowDefinition Height="*" />
                                    </Grid.RowDefinitions>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="*" />
                                    </Grid.ColumnDefinitions>
                                    <TextBlock Grid.Column="0" Grid.Row="0"  
                                                   Text="{Binding Path=TypeK}" />
                                </Grid>

                                <Grid Grid.Column="0" Grid.Row="2">
                                    <Grid.RowDefinitions >
                                        <RowDefinition Height="*" />
                                    </Grid.RowDefinitions>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="6*" />
                                        <ColumnDefinition Width="6*" />
                                    </Grid.ColumnDefinitions>
                                    <TextBlock Grid.Row="0"  Grid.Column="0"  
                                               Text="{Binding Path=Tk}"  />
                                    <TextBlock Grid.Row="0" Grid.Column="1"  
                                               Text="{Binding Path=Lft}" />
                                </Grid>

                                <Grid Grid.Column="0" Grid.Row="3">
                                    <Grid.RowDefinitions >
                                        <RowDefinition Height="*" />
                                    </Grid.RowDefinitions>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="*" />
                                    </Grid.ColumnDefinitions>
                                    <TextBlock Grid.Column="0" Grid.Row="0"  
                                               Text="{Binding Path=Crd}" />
                                </Grid>
                            </Grid>
                        </DataTemplate>
                    </Grid.Resources>

                    <Grid.RowDefinitions>
                        <RowDefinition Height="3*" />
                        <RowDefinition Height="4*" />
                        <RowDefinition Height="4*" />
                    </Grid.RowDefinitions>

                    <Border Grid.Column="0" Grid.Row="1" 
                            Background="#FF576577"
                            BorderBrush="{DynamicResource GrayBrush7}" BorderThickness="2">
                        <Viewbox Stretch="Uniform" >

                            !!! Here I want to use my template with Object1 as Datasource !!!

                        </Viewbox>
                    </Border>

                    <Border Grid.Column="0" Grid.Row="1" 
                            Background="#FF576577"
                            BorderBrush="{DynamicResource GrayBrush7}" BorderThickness="2">
                        <Viewbox Stretch="Uniform" >

                            !!! Here I want to use my template with Object2 as Datasource !!!

                        </Viewbox>
                    </Border>

                </Grid>

!!! 这里我想使用我的模板和Object1作为数据源!!!
!!! 这里我想使用我的模板和Object2作为数据源!!!

这里应该使用的不是
数据模板,而是
用户控件<代码>数据模板
通常用于具有要采用相同外观的子控件集合的控件

然后像这样使用自定义UserControl:

<Viewbox Stretch="Uniform">
<!--Here I want to use my template with Object2 as Datasource-->
    <views:MyGrdUserControl DataContext="{Binding Object2}"/>
</Viewbox>
使用
DataTemplate
usage语句时要更加小心:“当您将ItemsControl(如列表框)绑定到整个集合时,DataTemplate对象特别有用”。
<Viewbox Stretch="Uniform">
<!--Here I want to use my template with Object2 as Datasource-->
    <ContentPresenter Content="{Binding Object2}"
                      ContentTemplate="{StaticResource GrdTemplate}"/>
</Viewbox>