2

谁能告诉我为什么以下不起作用,但后面的起作用?注意 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 指定绑定和值。标记文件 ';component/ResourceDictionaries/LogStyles.xaml' 第 14 行位置 15 中的对象 'System.Windows.DataTrigger' 出错。

堆栈跟踪:在 System.Windows.Markup.XamlParseException.ThrowException(字符串消息,异常 innerException,Int32 lineNumber,Int32 linePosition,Uri baseUri,

4

2 回答 2

4

它可能是由 Anurag 链接到的错误引起的,但您应该知道,从 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}}"可能对您有用。您可能想尝试一下并找出答案。

于 2009-11-09T17:46:39.787 回答
2

这是一个已修复的错误。检查这个: http ://social.msdn.microsoft.com/Forums/en/wpf/thread/3fd23613-6f1d-4ae6-a279-b99d6fdbc374

于 2009-11-09T17:20:40.260 回答