任何人都可以告诉我为什么以下不起作用,但后面的那个不起作用?注意Value =语法与后者的显式用法。我不明白其中的区别。
<Style.Triggers>
<DataTrigger Binding="{Binding ItemType}" Value="{x:Type log:FranchiseAiring}">
<Setter Property="Template" Value="{StaticResource FranchiseRowStyle}" />
</DataTrigger>
</Style.Triggers>
上面抛出异常,下面工作正常:
<Style.Triggers>
<DataTrigger Binding="{Binding ItemType}">
<DataTrigger.Value>
<x:Type Type="{x:Type log:FranchiseAiring}" />
</DataTrigger.Value>
<Setter Property="Template" Value="{StaticResource FranchiseRowStyle}" />
</DataTrigger>
例外: 必须同时为DataTrigger指定Binding和Value 。标记文件中的对象'System.Windows.DataTrigger'出错'; component / ResourceDictionaries / LogStyles.xaml'第14行第15位。
堆栈跟踪: 在System.Windows.Markup.XamlParseException.ThrowException(String message,Exception innerException,Int32 lineNumber,Int32 linePosition,Uri baseUri,
答案 0 :(得分:4)
它可能是由Anurag链接的bug引起的,但是你应该知道你使用的两个例子从XAML的角度来看并不完全相同。
如果将其转换为元素属性语法
Value="{x:Type whatever}"
你得到的是:
<DataTrigger.Value>
<x:Type TypeName="whatever">
</DataTrigger.Value>
您在问题中写的内容实际上与
相对应Value="{x:Type Type={x:Type whatever}}"
由于TypeExtension的语义,两者都应该在我能想到的每种情况下产生相同的值。但是出于其他目的,他们可能会有所不同,他们可能会在WPF中发现不同的错误。
因此,Value="{x:Type Type={x:Type log:FranchiseAiring}}"
可能适合您。您可能想尝试并找出答案。
答案 1 :(得分:2)