2015-09-01 81 views
2

我用下面的DataTemplate的DataTemplate只顯示畫布的最後一個記錄

<DataTemplate x:Key="platform_resources"> 
    <StackPanel Orientation="Horizontal"> 
     <Viewbox Width="30" Height="30" ToolTip="Network Domain Count" Stretch="Uniform"> 
      <ContentControl DataContext="{Binding}" Focusable="False" Content="{DynamicResource appbar_server}" /> 
       </Viewbox> 
       <TextBlock Margin="0,7,0,0" Text="{Binding Path=workload_count}"/> 
       <Separator Style="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}" /> 
       <Viewbox Width="30" Height="30" ToolTip="Logical Network Count" Stretch="Uniform"> 
        <ContentControl Focusable="False" Content="{DynamicResource appbar_network_server_connecting}" /> 
       </Viewbox> 
       <TextBlock Margin="0,7,0,0" Text="{Binding Path=vlan_count}"/> 
       <Separator Style="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}" /> 
       <Viewbox Width="30" Height="30" ToolTip="Network Domain Count" Stretch="Uniform"> 
      <ContentControl Focusable="False" Content="{DynamicResource appbar_network}" /> 
     </Viewbox> 

    <TextBlock Margin="0,7,0,0" Text="{Binding Path=networkdomain_count}"/> 

    </StackPanel> 
</DataTemplate> 

模板顯示所有與分離的相關數據,但只顯示最後一個記錄圖像。它留下圖像應該在的空間,但沒有圖像。

enter image description here

回答

3

確保您x:Shared="False"屬性添加到您的資源。

例子:

<Canvas x:Key="appbar_server" x:Shared="False"> 
    <!-- ... --> 
</Canvas> 
+0

它產生相同的結果。看到我的代碼如下。謝謝。 – user1789782

1

這是因爲你可能定義了一些Image小號(例如appbar_server)在你的資源,並試圖在多個項目顯示它們。但ImageVisualWPF每個Visual只能有一個父。所以當你的物品正在生成時,每件物品會從前一個物品中盜取Image,直到最後一個物品最終獲得它爲止。

解決方案:

Image不同,BitmapImage不是Visual並且因此可以設置多個倍不同物品的來源。因此,而不是在你的Resources定義Image S,定義BitmapImage S:

<Window.Resources> 
    <BitmapImage x:Key="appbar_server" UriSource="C:\...\appbar_server.png"/> 
    .... 

然後代替ContentControl在你DataTemplate創建Image實例來介紹他們:

  <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <Viewbox Width="30" Height="30" ToolTip="Network Domain Count" Stretch="Uniform"> 
         <Image Focusable="False" Source="{DynamicResource appbar_server}" /> 
        </Viewbox> 
        <TextBlock Margin="0,7,0,0" Text="{Binding Path=workload_count}"/> 
        ... 

*更新:

圖像被捕獲在一個畫布whi ch似乎需要一些 特殊的包裝來完成這項工作。

在這種情況下,你應該爲每個Canvas這樣定義DataTemplate

<Window.Resources> 
    <DataTemplate x:Key="appbar_3d_3ds"> 
     <Canvas Width="76" Height="76" Clip="F1 M 0,0L 76,0L 76,76L 0,76L 0,0"> 
      <Path Width="32" Height="40" Canvas.Left="23" Canvas.Top="18" Stretch="Fill" Fill="Black" Data="F1 M 27,18L 23,26L 33,30L 24,38L 33,46L 23,50L 27,58L 45,58L 55,38L 45,18L 27,18 Z "/> 
     </Canvas> 
    </DataTemplate> 
    .... 

,然後在ItemTemplate創建ContentPresenter實例與他們ContentTemplate設置爲您預先定義的數據模板(如appbar_3d_3ds )。

  <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <Viewbox Width="30" Height="30" ToolTip="Network Domain Count" Stretch="Uniform"> 
         <ContentPresenter ContentTemplate="{DynamicResource appbar_3d_3ds}"/> 
        </Viewbox> 
        <TextBlock Margin="0,7,0,0" Text="{Binding Path=workload_count}"/> 
        .... 
+0

似乎我錯過了一些東西。圖像被捕獲在一個畫布上,似乎需要一些特殊的包裝來完成這項工作。 我現在收到以下錯誤: 「'System.Windows.Media.Imaging.BitmapImage'的初始化引發了一個異常。'行號「16」和行位置「48」。「 – user1789782

+0

這是畫布的樣子: user1789782