2011-05-24 81 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以瞭解如何執行此操作的示例。