我正在开发一个VS 2012 Express WPF项目(C#代码隐藏),我收到错误“在属性表达式中检测到循环”。在我继续之前,我知道为什么我得到它 - 我只是不确定该怎么做或者它是否需要处理,因为即使它出现在错误列表中并以蓝色加下划线,程序编译并运行得很好。我当然用谷歌搜索过,结果也各不相同。我的问题是两个部分,但首先是这里的简要说明:
违规代码:
<Style TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}">
<!-- setter properties -->
</Style>
正如你所看到的,这是Button的一种风格,它指的是引起问题的Button。我读到的第一个解决方法涉及分离代码,如下所示:
<Style x:Key="ButtonStyleToApply" TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}">
<!-- setter properties -->
</Style>
<!-- and in another style dictionary, -->
<Style TargetType="{x:Type Button}" BasedOn="{StaticResource ButtonStyleToApply}"/>
...然后两个样式集进入不同的词典。显然,这也没有任何好处 - VS仍然嗅出我正在做的事情,但它仍然编译并运行良好。现在,这是另一种解决方法:
“Visual Studio中的XAML设计器中存在一些体系结构更改,这已经使这种情况退化了。我们将来会努力改进这种体验,但是现在您可以通过不在Application对象中定义资源来解决这个问题(App.xaml),而是在本地文档(MainPage.xaml)“
中定义它们这是在技术支持查询Here中发布的。 (Connect.Microsoft.Com)
但我相信每个人的经验。我的同伴能告诉我什么?我的问题是两个部分。 1.如果程序正在编译,我是否需要打扰解决方法? 2.如果我很高兴,有没有办法告诉VS忽略它?我知道在我这方面无视它或者VS可能被认为是“糟糕的做法”,但除此之外......?
答案 0 :(得分:13)
您使用的语法没有错;定义基于现有隐式样式的隐式样式是合法的。您提供的代码示例在VS 2010中为我工作,没有任何投诉,但在VS2012中产生了有问题的错误。
由于它在两个版本中也编译并运行良好,我怀疑问题出在VS 2012 XAML设计器支持上。这对你来说有多大的交易取决于你对WPF视图的设计师渲染的依赖程度。 (例如,我通常隐藏渲染的视图并专门在XAML视图中工作。)如果使用该功能,您可能会注意到在设计时并未正确设置所有属性。当然,由于生产者通常在运行时间之前没有太大的影响,你可能永远不会注意到差异。
而且,正如您的问题正确指出的那样,即使微软已经将此视为VS2012中的回归,这强烈暗示他们不希望错误发生并且可能在未来的某个时刻修复设计者错误。