从资源重新使用WPF中的UI

从资源重新使用WPF中的UI,wpf,xaml,resourcedictionary,Wpf,Xaml,Resourcedictionary,我在UI上有几个选项卡,每个选项卡上我都需要以下内容: <StackPanel Orientation="Horizontal"> <Button Content="&lt;" Command="{Binding MoveToPreviousCommand}" /> <TextBlock Text="{Binding SelectedItem.Name}" /> <Button Content="&gt;"

我在UI上有几个选项卡,每个选项卡上我都需要以下内容:

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


有没有一种方法可以避免在XAML中为每个选项卡复制此代码,例如在参考资料中只指定一次上述代码,并指向每个选项卡下的资源?

使用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>
<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.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>
<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>




我通常使用UserControl进行此操作+1使用ContentControl:直接在参考资料中设置StackPanel时,它只在一个选项卡上显示内容(XAML中最后定义的内容)。在其他选项卡上,ContentControl没有显示任何内容。使用ContentControl:当使用DataTemplate时,我将在绑定正确后获得所需的行为:Command=“{Binding RelativeSource={RelativeSource AncestorType={x:Type Window},Path=DataContext.MoveToPreviousCommand}”@user2143213您可以为此使用X:shared=false。