Разница между атрибутом Value и явным DataTrigger.Значение в ResourceDictionary?
-
19-09-2019 - |
Вопрос
Кто-нибудь может сказать мне, почему следующее не работает, но следующее за ним работает?Обратите внимание на синтаксис 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.Ошибка в системе объекта.Windows.DataTrigger' в файле разметки ';component/ResourceDictionaries/LogStyles.xaml' Строка 14, Позиция 15.
Трассировка стека:в системе.Windows.Разметка.Исключение XamlParseException.Throw исключение (строковое сообщение, исключение InnerException, номер строки Int32, расположение строки Int32, Uri baseUri,
Решение
Вероятно, это вызвано ошибкой, на которую ссылается 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}}"
может сработать и для вас.Возможно, вы захотите попробовать это и выяснить.
Другие советы
Это ошибка, которая была исправлена.Проверьте это:http://social.msdn.microsoft.com/Forums/en/wpf/thread/3fd23613-6f1d-4ae6-a279-b99d6fdbc374