TabControl 静态资源路径图标在选项卡的开关上消失

TabControl staticresource path icons dissapear on tab's switch

我似乎没有找到如何在 wpf 中制作可重用路径图标的答案。我怀疑我的问题与使用 Image visuals 而不是 Source 相同,但无法弄清楚如何为 Paths 解决这个问题。

我有一个选项卡控件,在选项卡中有单独的自定义控件。他们每个人都有 'path' 内容的按钮。

<Button Style="{StaticResource ButtonIconStyle}"
        Content="{StaticResource RefreshIcon}" 
        Command="{Binding RefreshCommand}"/>

图标所在位置:

<Path x:Key="RefreshIcon" Stretch="Uniform" 
      Fill="{StaticResource ButtonIconColor}" Data="..."/>

我需要这种 Uniform 拉伸,所以我也尝试了 ViewBox,但这没有帮助。

我打开的第一个带有这个图标的标签显示正常(它可以是任何标签,而不是在 tabcontrol 中的第一个)。但是在切换到具有相同定义按钮的另一个选项卡并切换回上一个选项卡后,第一个选项卡中的图标不再可见。它只发生在相同的图标上(如果第二个选项卡中没有图标,它将保持可见)。

我该怎么办?

顺便说一句,我的按钮已设置样式,但当它们只是带有路径内容的简单矩形按钮时,同样的事情发生了。

问题是您的路径在多个地方(由 Button 的不同实例)使用 StaticResourceExtension 引用。由于 Path 是一个 FrameworkElement 并且它只能在可视化树中出现一次,如果您加载第二个选项卡(从而将 Path 加载到该选项卡中,它会从上一个选项卡(满足上述条件)。观察它在最后一个选项卡中始终可见。

为了解决这个问题,您需要在资源字典中的 Path 上设置 x:Shared="False" - 这样每当使用 StaticResouceExtension 引用它时,都会返回一个副本,而不是而不是资源字典中的实际实例,每个实例都将按预期加载并保留在可视化树中。