Разница между значением атрибута и явным DataTrigger.Value в ResourceDictionary? - PullRequest
2 голосов
/ 09 ноября 2009

Может кто-нибудь сказать мне, почему следующее не работает, но один после этого?Обратите внимание на синтаксис 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>

Исключение: Необходимо указать оба Bindingи значение для DataTrigger .Ошибка объекта "System.Windows.DataTrigger" в файле разметки "; component / ResourceDictionaries / LogStyles.xaml" Строка 14, позиция 15.

Трассировка стека: в System.Windows.Markup.XamlParseException.ThrowException (Строковое сообщение, Исключение innerException, Int32 lineNumber, Int32 linePosition, Uri baseUri,

Ответы [ 2 ]

4 голосов
/ 09 ноября 2009

Возможно, это вызвано ошибкой, с которой связан 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}}" может работать на вас. Вы можете попробовать это и выяснить.

2 голосов
/ 09 ноября 2009

Это ошибка, которая была исправлена. Проверь это: http://social.msdn.microsoft.com/Forums/en/wpf/thread/3fd23613-6f1d-4ae6-a279-b99d6fdbc374

...