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