【问题标题】:WPF: Why would this cause a stack overflow exception?WPF:为什么这会导致堆栈溢出异常?
【发布时间】:2011-01-13 08:08:23
【问题描述】:

当我添加这种样式时,它会用 StackOverflowException 中断我的应用程序。

<Style TargetType="GroupBox" BasedOn="{StaticResource {x:Type GroupBox}}" >
<!-- <Setter Property="Background" Value="{DynamicResource WindowBackgroundBrush}" /> -->
</Style>

以防万一,我使用的是 ShinyBlue 主题。

有什么想法会导致这种情况吗?

【问题讨论】:

  • 您能详细说明一下吗?我刚刚创建了一个空的 WPF 项目并复制/粘贴了您的代码,添加了一个 GroupBox,它工作正常。您是否在 IDE 中也遇​​到问题,或者仅在启动时遇到问题?调试还是发布编译?你用的是哪个VS版本?安装SP1?操作系统?
  • VS 2008 SP1。调试模式。它适用于 XAMLPad。
  • 嗯,就像我的设置一样,在 Win 7 上运行。也许您可以在使用它的环境中发布更多代码。我只是把它放到了Windows.Resources 部分,它工作得很好。你用最小的例子试过了吗?
  • 最小的例子不会发生这种情况。也许这与我将其加载到 WinForms 表单中这一事实有关。

标签: .net wpf exception styles stack-overflow


【解决方案1】:

这是一个“已知问题”,至少我记得我也有它,它使用基于默认样式的控件进行复制,这些控件在主题中也有一些默认样式。 AFAIR,我使用了自己的主题,所以我只是去给这些样式命名并使用名称而不是 {x:Type GroupBox} 这对我有帮助,但如果你不能这样做,the Internets advise 你移动你的派生样式到较低的 XAML 范围。

至于异常的根本原因,AFAIR,默认样式解析中存在一个错误,它将主题的样式作为您的自定义样式的默认样式,然后将您的自定义样式作为主题的默认样式等等等等,所以!

【讨论】:

  • 是的,这听起来和正在发生的事情一模一样。
【解决方案2】:

尝试更改静态资源的名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-24
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    • 2010-10-02
    相关资源
    最近更新 更多