我希望将同一用户控件的实例显示两次。我尝试做了以下几件事:
<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>
我收到错误消息:“{”指定的元素已经是另一个元素的逻辑子元素。请先断开连接。“}”
我想实现的目标有可能实现吗?
谢谢,
发布于 2011-05-24 03:14:55
事实并非如此。如错误所示,给定的对象只能在给定的逻辑树中出现一次。这有助于确保逻辑树保持为树。
如果你使用的是MVVM模式(或者通常只是使用DataBinding ),那么你可以将两个不同的UserControls绑定到同一个后台视图模型/数据上,这样两个控件就会有相同的行为和操作相同的状态表示。不过,您仍然需要两个不同的控件。
发布于 2011-05-24 03:22:07
在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将其“绘制”到另一个控件上。
发布于 2011-05-24 08:11:51
你不可能在两个地方拥有相同的控件,但你可以让它跳转,参见我的this answer中的一个例子。
https://stackoverflow.com/questions/6105309
复制相似问题