我正在使用以下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>模板用分隔符显示所有相关数据,但只显示在最后一个记录上的图像。它留下了图像应该存在的空间,但没有图像。

发布于 2015-09-01 04:57:33
确保将x:Shared="False"属性添加到资源中。
示例:
<Canvas x:Key="appbar_server" x:Shared="False">
<!-- ... -->
</Canvas>发布于 2015-09-01 12:48:27
这是因为您可能在资源中定义了一些Images (例如appbar_server),并试图在多个项中显示它们。但是Image是一个Visual,在WPF中,每个Visual只能有一个父级。因此,当生成项时,每个项都会从上一项中窃取Image,直到最后一项最终得到为止。
解决方案:
与Image不同,BitmapImage不是Visual,因此可以多次将其设置为不同项的源。因此,与其在Resources中定义BitmapImages,不如定义BitmapImages:
<Window.Resources>
<BitmapImage x:Key="appbar_server" UriSource="C:\...\appbar_server.png"/>
....然后,用ContentControl在DataTemplate中创建Image实例来表示它们,而不是DataTemplate:
<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}"/>
...*更新:
图像是在画布中捕获的,而画布似乎需要一些特殊的包装才能完成这项工作。
在这种情况下,您应该为每个DataTemplate定义一个Canvas,如下所示:
<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>
....然后在您的ContentPresenter中创建ItemTemplate实例,并将其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}"/>
....https://stackoverflow.com/questions/32323627
复制相似问题