Я уже некоторое время борюсь с этим кодом и не могу найти никаких полных ответов на мой вопрос. Я создал небольшой образец, чтобы проиллюстрировать проблему:
<ListView >
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Margin="0,0,20,0" IsItemsHost="True" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.Items>
<TextBlock>Test1</TextBlock>
<TextBlock>Test2</TextBlock>
<TextBlock>Test3</TextBlock>
<TextBlock>Test4</TextBlock>
<TextBlock>Test5</TextBlock>
</ListView.Items>
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListViewItem}">
<Grid>
<ContentPresenter/>
</Grid>
<ControlTemplate.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}" Value="True" />
<Condition Property="IsSelected" Value="True"/>
</MultiTrigger.Conditions>
<Setter Property="Visibility" Value="Collapsed"/>
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
</ListView>
В соответствии с настройками MultiTrigger выбранный элемент должен появиться, когда мышь больше не находится над выбранным элементом. Этот код, однако, создает InvalidOperationException с сообщением "Должен иметь ненулевое значение для свойства". Если вы удалите условие, использующее атрибут "Связывание", исключение не будет выбрано. В документации MSDN указано, что у вас должен быть либо атрибут Property, либо Binding. Вышеуказанные функции кода, такие как атрибут Binding, не установлены. Фактически, во всех моих тестовых случаях не имеет значения, для чего установлен атрибут Binding; исключение все еще бросается. Любые мысли?