7

I have two DataTemplates for different cells in my Treelistview control. the templates are 90% similar. How can I reuse the identical Xaml ?

 <DataTemplate x:Key="@names"> <TextBlock Name="txt" Text="{Binding Names}" Style="{DynamicResource @BasicTextBlockStyle}" Foreground="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Border},AncestorLevel=1}, Path=BorderBrush,Mode=OneWay}" /> <DataTemplate.Triggers> <DataTrigger Binding="{Binding IsVisible}" Value="True"> <Setter Property="Style" Value="{DynamicResource @HeaderTextBlockStyle}" TargetName="txt" /> </DataTrigger> <DataTrigger Binding="{Binding IsScoped}" Value="True"> <Setter Property="Style" Value="{DynamicResource @RootElementTextBlockStyle}" TargetName="txt" /> </DataTrigger> </DataTemplate.Triggers> </DataTemplate> <DataTemplate x:Key="@Ages"> <TextBlock Name="txt" Text="{Binding Age}" Style="{DynamicResource @BasicTextBlockStyle}" Foreground="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Border},AncestorLevel=1}, Path=BorderBrush,Mode=OneWay}" /> <DataTemplate.Triggers> <DataTrigger Binding="{Binding IsVisible}" Value="True"> <Setter Property="Style" Value="{DynamicResource @HeaderTextBlockStyle}" TargetName="txt" /> </DataTrigger> <DataTrigger Binding="{Binding IsScoped}" Value="True"> <Setter Property="Style" Value="{DynamicResource @RootElementTextBlockStyle}" TargetName="txt" /> </DataTrigger> </DataTemplate.Triggers> </DataTemplate> 

1 Answer 1

7

You can try doing something like this:

<DataTemplate x:Key="Inner"> <TextBlock Name="txt" Text="{Binding}" Style="{DynamicResource @BasicTextBlockStyle}" Foreground="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Border},AncestorLevel=1}, Path=BorderBrush,Mode=OneWay}" /> <DataTemplate.Triggers> <DataTrigger Binding="{Binding IsVisible}" Value="True"> <Setter Property="Style" Value="{DynamicResource @HeaderTextBlockStyle}" TargetName="txt" /> </DataTrigger> <DataTrigger Binding="{Binding IsScoped}" Value="True"> <Setter Property="Style" Value="{DynamicResource @RootElementTextBlockStyle}" TargetName="txt" /> </DataTrigger> </DataTemplate.Triggers> </DataTemplate> <DataTemplate x:Key="Names"> <Border BorderBrush="Black" BorderThickness="1" Height="100" Width="100" HorizontalAlignment="Left"> <ContentPresenter Content="{Binding Names}" ContentTemplate="{StaticResource Inner}" /> </Border> </DataTemplate> <DataTemplate x:Key="Ages"> <Border BorderBrush="Black" BorderThickness="1" Height="100" Width="100" HorizontalAlignment="Right"> <ContentPresenter Content="{Binding Ages}" ContentTemplate="{StaticResource Inner}" /> </Border> </DataTemplate> 
Sign up to request clarification or add additional context in comments.

1 Comment

Nice idea but it's forcing me to add unnecessary border witch I prefer to avoid from.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.