2016-03-29 69 views
0

在我的WPF應用程序中,我想重複使用網格模板幾次。 我爲網格定義了一個數據模板(名爲GrdTemplate),我想在我的XAML定義的幾個地方使用這個模板。 如何使用網格模板?是否可以在WPF中重用網格模式/模板

這裏是我的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> 

回答

1

你應該在這裏用的是不是一個DataTemplate而是UserControlDataTemplates通常用於具有您希望採用相同外觀的子控件集合的控件。

然後使用您的自定義用戶控件這樣的:

<Viewbox Stretch="Uniform"> 
<!--Here I want to use my template with Object2 as Datasource--> 
    <views:MyGrdUserControl DataContext="{Binding Object2}"/> 
</Viewbox> 

如果你想用你的DataTemplate雖然你可以使用一個ContentPresenter,並設置ContentTemplate是你GrdTemplate資源

<Viewbox Stretch="Uniform"> 
<!--Here I want to use my template with Object2 as Datasource--> 
    <ContentPresenter Content="{Binding Object2}" 
         ContentTemplate="{StaticResource GrdTemplate}"/> 
</Viewbox> 
+0

[:資源下載](https://msdn.microsoft.com/en-us/library/system.windows.datatemplate(v = vs.110).aspx)更加註意*使用'DataTemplate'用法語句:*「DataTemplate對象是**當您綁定ItemsControl(如List)時,**特別有用Box整個集合「*。 – Sinatr

+0

太棒了!謝謝。 – iljon

相關問題