私はしばらくの間このコードに苦労してきましたが、私の質問に対する完全な答えが見つからないようです。問題を説明するために小さなサンプルを作成しました。
<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 設定によると、マウスが選択された項目の上になくなると、選択された項目が再表示されます。ただし、このコードは、「'Property' には null 以外の値が必要です」というメッセージを含む InvalidOperationException を生成します。「バインディング」属性を使用する条件を削除すると、例外はスローされません。MSDN のドキュメントでは、Property または Binding 属性を設定する必要があると記載されています。上記のコードは、Binding 属性が設定されていないように機能します。実際、私のすべてのテスト ケースでは、Binding 属性が何に設定されているかは問題ではありません。例外は引き続きスローされます。何かご意見は?