ResourceDictionary中Value属性和显式DataTrigger.Value之间的区别?

时间:2009-11-09 16:28:56

标签: wpf wpfdatagrid resourcedictionary

任何人都可以告诉我为什么以下不起作用,但后面的那个不起作用?注意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,

2 个答案:

答案 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)