我一直在为这段代码苦苦挣扎一段时间,似乎无法找到我的问题的任何完整答案。我创建了一个小样本来说明问题:
<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,并显示消息“‘Property’ 必须具有非空值”。如果您删除使用“绑定”属性的条件,则不会引发异常。在 MSDN 文档中,它声明您必须设置 Property 或 Binding 属性。上面的代码功能,比如Binding属性没有设置。事实上,在我所有的测试用例中,将 Binding 属性设置为什么并不重要;仍然抛出异常。有什么想法吗?