【问题标题】:Can you prevent a WPF style from being overriden via code?您可以防止通过代码覆盖 WPF 样式吗?
【发布时间】:2013-09-25 14:46:27
【问题描述】:

我们目前的情况是,我们有来自合作伙伴的 WPF 样式,我们可以覆盖这些样式进行自定义。

但是,在一种情况下,样式似乎后来被我们无权访问的代码覆盖。这意味着我对样式应用的任何更改都不会产生影响,因为稍后代码会进入并再次更改它。

问题是:有什么方法可以将样式标记为不可覆盖(可以这么说),所以无论代码中发生什么,某些属性值都将保持不变?

【问题讨论】:

  • 我不认为这是可能的......不要忘记在运行时编码的 XAML 短语。
  • 我认为唯一的方法(涉及编码)是拥有某种 OnStyleChanged 事件处理程序,并从那里取消更改。如果你确实得到了这样的事件处理程序,你可以进一步构建一个 DependencyProperty 来在 XAML 中标记它
  • 他们在代码中所做的样式有意义吗?您是否只是要求他们不要在代码中覆盖?
  • @Blam,我们开发人员往往会忘记我们也可以与其他人交谈:P
  • 它看起来是一个设计特性:公司让您创建/覆盖默认样式,但您不能覆盖某个部分。也许他们不希望你那样做。无论如何,为了做到这一点,他们必须明确地写一些东西来防止覆盖:它不是“免费的”。

标签: c# wpf xaml


【解决方案1】:

可能应该是评论,但我还没有写 cmets 的权限。

如果您在代码中创建了样式,那么您是否探索过 Style.Seal() 方法来设置 Style.IsSealed 属性?

http://msdn.microsoft.com/en-us/library/system.windows.style.issealed.aspx

http://msdn.microsoft.com/en-us/library/system.windows.style.seal.aspx

【讨论】:

  • 我猜我们可以使用这个作为解决方法。我们现在找到了一个不同的解决方案,它使我们能够实现我们想要的结果,尽管它是一个 hack。我们希望在下一个版本中能够访问一些 StyleChanged 事件,然后能够清理代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-31
  • 1970-01-01
  • 2016-10-16
  • 1970-01-01
  • 2018-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多