Разница между атрибутом Value и явным DataTrigger.Значение в ResourceDictionary?

StackOverflow https://stackoverflow.com/questions/1702141

Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top