WPF

2016-03-29 16 views
0

'daki ızgara desenini/şablonunu yeniden kullanmak mümkün mü? WPF uygulamasında kılavuz şablonunu birkaç kez tekrar kullanmak istiyorum. Izgara için bir veri şablonu tanımladım (GrdTemplate adlı) ve bu şablonu XAML tanımımın çeşitli yerlerinde kullanmak istiyorum. Kılavuz şablonu nasıl kullanılabilir?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> 

cevap

1

Burada ne kullanmalıyım bir DataTemplate ama UserControl değildir:

İşte benim XAML kodudur. DataTemplates, genellikle aynı görünümü almak istediğiniz bir çocuk denetimleri koleksiyonuna sahip denetimler için kullanılır.

O zaman bu gibi özel UserControl kullanın:

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

size ContentPresenter kullanıp ContentTemplate ayarlayabilirsiniz olsa GrdTemplate kaynak olmak için DataTemplate kullanmak istediğiniz takdirde

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

[Msdn ] (https://msdn.microsoft.com/en-us/library/system.windows.datatemplate (v = vs.110) .aspx) daha * dikkatli * ile DataTemplate' kullanımı ifade: * "DataTemplate nesneleridir ** Bir liste gibi bir ItemsControl'ü bağladığınızda özellikle yararlı ** Tüm koleksiyon için kutu "*. – Sinatr

+0

Harika! Teşekkür ederim. – iljon