2016-03-29 10 views
0

私のWPFアプリケーションでは、グリッドテンプレートを何度か再利用したいと思います。 グリッド(GrdTemplateという名前)のデータテンプレートを定義しました。私はこのテンプレートを自分のXAML定義のいくつかの場所で使いたいと思います。 グリッドテンプレートはどのように使用できますか?WPFでグリッドパターン/テンプレートを再利用することは可能です

 <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しかしUserControlではありません。

は、ここに私のXAMLコードです。 DataTemplatesは、通常、同じ外観を使用する子コントロールのコレクションを持つコントロールに使用されます。その後

次のようにカスタムユーザーコントロールを使用する:あなたはContentPresenterを使用し、GrdTemplateリソース

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

するContentTemplateを設定することができても、あなたのDataTemplateを使いたいならば

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

[MSDN ](https://msdn.microsoft.com/en-us/library/system.windows.datatemplate(v = vs.110).aspx)は、「DataTemplate」用法でもっと注意します* *「DataTemplateオブジェクトは**特に便利** ListなどのItemsControlをバインドする場合ボックス全体をコレクションにします*。 – Sinatr

+0

素晴らしい!ありがとうございました。 – iljon

関連する問題