强制使用设置 x:Shared="False" 不可能

Mandatory Use of Setting x:Shared="False" Not Possible

这个问题可能与 Error when using x:Shared="False" resources in external assembly in WPF 之类的问题非常相似,但我一直无法找到一个我可以与之相关的解决方案,或者更确切地说,我无法找到如何解决这个问题的想法。

为什么我在标题中提到强制使用是因为除了使用将 X:shared 设置为 false 之外,我无法找到解决问题的替代方法。

我的问题是,在具有图标的特定视图中,相似类型图标的元素似乎是共享的,因此即使有两种或更多类型,图标也只会用一个项目呈现

这个问题在这些堆栈溢出问题中也是合理的

我非常感谢任何 help/suggestions 来克服这个问题

复杂的是你那里有无数的颜色。现在的趋势是使用只有背景和前景的更简单的图标。您可以 "just" 使用一条路径和几何图形。

看到这是多种形状和多种颜色,您可以使用 DrawingImage。

我在用户控件中做了这个例子,它大致像你的图标之一。

       xmlns:PresentationOptions="http://schemas.microsoft.com/winfx/2006/xaml/presentation/options" 
        mc:Ignorable="PresentationOptions"
                 >
        <UserControl.Resources>
            <DrawingImage x:Key='icon'  PresentationOptions:Freeze="True">
                <DrawingImage.Drawing>
                    <DrawingGroup>
                        <DrawingGroup.Children>
                            <GeometryDrawing Geometry="M17,17A5,5,0,0,1,12,22A5,5,0,0,1,7,17C7,15.36,7.79,13.91,9,13L9,5A3,3,0,0,1,12,2A3,3,0,0,1,15,5L15,13C16.21,13.91,17,15.36,17,17 M11,8L11,14.17C9.83,14.58,9,15.69,9,17A3,3,0,0,0,12,20A3,3,0,0,0,15,17C15,15.69,14.17,14.58,13,14.17L13,8 11,8z"
                                             Brush="Wheat"
                                             >
                                <GeometryDrawing.Pen>
                                    <Pen Thickness="1" Brush="Green"/>
                                </GeometryDrawing.Pen>
                            </GeometryDrawing>
                            <GeometryDrawing Geometry="M17,18L12,15.82 7,18 7,5 17,5 M17,3L7,3A2,2,0,0,0,5,5L5,21 12,18 19,21 19,5C19,3.89,18.1,3,17,3z"
                                             Brush="Lavender"
                                             >
                                <GeometryDrawing.Pen>
                                    <Pen Thickness="1" Brush="Red"/>
                                </GeometryDrawing.Pen>
                            </GeometryDrawing>
                        </DrawingGroup.Children>
                    </DrawingGroup>
                </DrawingImage.Drawing>
            </DrawingImage>
        </UserControl.Resources>
        <Grid>
            <StackPanel>
                <Image  Width="12" Height="12" Source="{StaticResource icon}"/>
                <Image  Width="12" Height="12" Source="{StaticResource icon}"/>
            </StackPanel>

        </Grid>
    </UserControl>

我可能会考虑使用 DataTemplates 创建图标,如果出于任何原因 x:Shared 是个问题。 DataTemplate 在应用时实例化内容的副本,因此共享不是问题。

资源:

<DataTemplate x:Key="FileSystemIcon">
    <Canvas Width="12" Height="12">
        <Path 
            Stroke="Black" 
            Fill="White"  
            Data="M20,4L4,4A2,2,0,0,0,2,6L2,18A2,2,0,0,0,4,20L20,20A2,2,0,0,0,22,18L22,6A2,2,0,0,0,20,4 M20,18L4,18 4,8 12,13 20,8 20,18 M20,6L12,11 4,6 4,6 20,6 20,6z" 
            />
    </Canvas>
</DataTemplate>

用法:

<UserControl ContentTemplate="{StaticResource FileSystemIcon}" />