我想两次显示相同的用户控件实例.我试过做以下事情:
<UserControl.Resources>
<Views:MyControl View x:Key="_uc1" MinHeight="300"/>
</UserControl.Resources>
Run Code Online (Sandbox Code Playgroud)
并尝试在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>
Run Code Online (Sandbox Code Playgroud)
我收到错误消息:"{"指定的元素已经是另一个元素的逻辑子元素.首先断开它."}"
我试图实现的可能性是什么?
谢谢,
不是.如错误所示,给定对象可能仅存在于给定逻辑树中一次.这有助于确保逻辑树仍然是树.
如果您正在使用MVVM模式(或者通常仅使用DataBinding),那么您可以将两个不同的UserControl绑定到相同的后备ViewModel/data,以便控件的行为相同并在相同的状态表示上运行.但是,你仍然需要两个不同的控件.
在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>
Run Code Online (Sandbox Code Playgroud)
如果您只想让单个控件出现在可视树中的多个位置,但实际上不是交互式,则可以使用VisualBrush "绘制"到另一个控件上.
| 归档时间: |
|
| 查看次数: |
4695 次 |
| 最近记录: |