Nuts
Nuts

Reputation: 2813

Re-using UI in WPF from a Resource

I have a several tabs on UI where on each tab I need the below:

<StackPanel Orientation="Horizontal">
     <Button Content="&lt;" Command="{Binding MoveToPreviousCommand}" />
     <TextBlock Text="{Binding SelectedItem.Name}" />
     <Button Content="&gt;" Command="{Binding MoveToNextCommand}" />
</StackPanel>

Is there a way to avoid replicating this code in XAML for each tab by specifying the above for example in the Resources only once and pointing into that resource under each tab?

Upvotes: 1

Views: 243

Answers (1)

Heena
Heena

Reputation: 8654

Using ContentControl

 <Window.Resources>       
    <StackPanel x:Key="Content" x:Shared="False" Orientation="Horizontal">
        <Button Content="&lt;" Command="{Binding MoveToPreviousCommand}" />
        <TextBlock Text="{Binding SelectedItem.Name}" />
        <Button Content="&gt;" Command="{Binding MoveToNextCommand}" />
    </StackPanel>

    <DataTemplate x:Key="template1">
        <StackPanel  Orientation="Horizontal">
            <Button Content="&lt;" Command="{Binding MoveToPreviousCommand}" />
            <TextBlock Text="{Binding SelectedItem.Name}" />
            <Button Content="&gt;" Command="{Binding MoveToNextCommand}" />
        </StackPanel>
    </DataTemplate>
</Window.Resources>

<StackPanel>
    <ContentControl Content="{StaticResource Content}"></ContentControl>
    <ContentControl Name="contCtrl" ContentTemplate="{StaticResource template1}" Content="This is the content of the content control."/>
</StackPanel>

using usercontrol

enter image description here

<UserControl x:Class="WpfApplication2.UserControl1"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
 <StackPanel  Orientation="Horizontal">
        <Button Content="&lt;" Command="{Binding MoveToPreviousCommand}" />
        <TextBlock Text="{Binding SelectedItem.Name}" />
        <Button Content="&gt;" Command="{Binding MoveToNextCommand}" />
</StackPanel>

<Window x:Class="WpfApplication2.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525"
    xmlns:local="clr-namespace:WpfApplication2">

<Grid>
    <local:UserControl1></local:UserControl1>
</Grid>

Upvotes: 3

Related Questions