2011-05-24 83 views
9

我想显示两次相同的用户控件实例。香港专业教育学院试着做以下几点:WPF .NET4.0重复使用UserControl的相同实例

<UserControl.Resources> 
    <Views:MyControl View x:Key="_uc1" MinHeight="300"/> 
</UserControl.Resources> 

,并试图在一个TabControl使用它:

<TabControl Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="3" > 
    <TabItem > 
     <TabItem.Header> 
      <TextBlock Text="Header1" FontWeight="13"/> 
     </TabItem.Header> 

     <StackPanel > 
      <ContentControl Content="{StaticResource _uc1}"/> 
     </StackPanel> 
    </TabItem> 
    <TabItem > 
     <TabItem.Header> 
      <TextBlock Text="Header2" FontWeight="13"/> 
     </TabItem.Header> 

     <StackPanel MinHeight="600" > 
      <ContentControl Content="{StaticResource _uc1}"/> 
     </StackPanel> 
    </TabItem> 
</TabControl> 

即时得到错误信息: “{”指定的元素已经是逻辑子的另一个元素。断开它。“}”

是我试图实现可能吗?

谢谢,

回答

6

这不是。如错误所示,给定的对象可能只存在于给定的逻辑树中一次。这有助于确保逻辑树仍然是

如果你使用MVVM模式(或者只是使用数据绑定在一般情况下,),那么你可以结合两个不同的用户控件到了同一个后备视图模型/数据,使控件将具有相同的行为和操作上相同的状态表示。不过,你仍然需要两个不同的控件。

+0

这个伎俩。绑定到相同的datasouce(查看模型)干杯。 – TheRenoRanger 2011-05-30 18:12:50

8

在WPF(和Silverlight)中,控件不能在视觉树中的多个位置。你可以做的是有两个单独的用户控件实例,但将它们的相关属性绑定到相同的基础源。

例如,假设您有一个Contact对象,并且您希望两个MyControl实例引用相同的FullName属性。

<UserControl> 
    <UserControl.Resources> 
     <my:Contact x:Key="data" FullName="Josh Einstein" /> 
    </UserControl.Resources> 
    <TabControl DataContext="{StaticResource data}"> 
     <TabItem> 
     <TabItem.Header> 
      <TextBlock Text="Header1" FontWeight="13" /> 
     </TabItem.Header> 
     <StackPanel> 
      <!-- instance #1 --> 
      <Views:MyControl FullName="{Binding FullName, Mode=TwoWay}" /> 
     </StackPanel> 
     </TabItem> 
     <TabItem> 
     <TabItem.Header> 
      <TextBlock Text="Header2" FontWeight="13" /> 
     </TabItem.Header> 
     <StackPanel> 
      <!-- instance #2 --> 
      <Views:MyControl FullName="{Binding FullName, Mode=TwoWay}" /> 
     </StackPanel> 
     </TabItem> 
    </TabControl> 
</UserControl> 

如果你只想要一个可以控制在可视化树的多个地方出现,但实际上没有互动,你可以使用一个VisualBrush“画”到另一个控制。

0

你不能在两个地方拥有相同的控制权,但是你可以跳转,请参阅我的this answer以了解如何执行此操作的示例。