wpf - 在 DynamicResource 上使用 BasedOn 样式属性

标签 wpf xaml

我想知道是否有一种方法可以将 wpf 样式的 basedOn 属性与动态资源一起使用。例如

<Style BasedOn="{DynamicResource somestyle}">
   <Setter Property="SomeProp" Value="SomeValue"/>
</Style>

这例如抛出一个错误,表明动态资源与 BaseOn 样式结合使用是不可能的。
我想知道怎么会有人这样做?
谢谢

最佳答案

我认为主要原因是密封的物体。如果您有样式层次结构:

       Style A
      /       \
  Style A1  Style A2

这可能不是一个困难的场景。您引用StyleA使用动态资源,因此每当该资源发生变化时,Style A1Style A2应该改变他们的BasedOn属性(property)。但是,一旦在您的应用程序中使用了 Style,它就会成为一个密封对象。 Style A变得不可变。

您可以使用的一种解决方法是:
  • Style A需要改变。
  • 创建一个新的 Style 对象,它将成为新的 Style A资源。
  • 创建新版本Style A1Style A2 .您需要编写一个复制过程来复制所有 Setters , Resources等设置BasedOnStyle A的新版本.
  • 更新资源集合,以便在其中包含三种新样式。
  • {DynamicResource StyleA1}{DynamicResource StyleA2}现在应该知道这些资源发生了变化(从第 4 步开始)并自动更新任何引用。

    请注意,这是一个非常简单的场景。现实世界风格的层次结构可能更复杂,尤其是当它们分布在多个文件中并且来自合并的字典时。

    希望我理解你的问题并提供帮助。

    关于wpf - 在 DynamicResource 上使用 BasedOn 样式属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/585429/

    相关文章:

    c# - Silverlight 切换按钮分组

    c# - 无法在 wpf 中将 treeviewitem 转换为 treeviewitem

    c# - 在应用程序设置中保存字典并在启动时加载它

    .net - app.xaml 无法识别 Wpf 合并资源字典

    c# - 如何在 MVVM 中管理多个窗口

    c# - XAML 图像被截断

    c# - 使用 SemanticZoom 显示按字母顺序排列的标题,就像在“开始”菜单上一样

    wpf - TextEdit_KeyDown 事件绑定(bind)到命令

    c# - 选择正确的 ItemsSource 容器

    wpf - 在 Wpf 和 Xamarin Forms 之间共享 IValueConverter