答案 0 :(得分:3)
确保将x:Shared="False"
属性添加到资源中。
示例:
<Canvas x:Key="appbar_server" x:Shared="False">
<!-- ... -->
</Canvas>
答案 1 :(得分:1)
这是因为您可能在资源中定义了一些Image
s(例如appbar_server
)并尝试在多个项目中显示它们。但Image
是Visual
,而WPF
每个Visual
只能有一个父级。因此,当您的项目生成时,每个项目都会从前一个项目中窃取Image
,直到最后一个项目最终获得它。
<强>解决方案:强>
与Image
不同,BitmapImage
不是Visual
,因此可以多次设置为不同项目的来源。因此,不要在Image
中定义Resources
,而是定义BitmapImage
s:
<Window.Resources>
<BitmapImage x:Key="appbar_server" UriSource="C:\...\appbar_server.png"/>
....
然后代替ContentControl
在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}"/>
....