我已经花了一些时间来研究这段代码,但似乎找不到完整的答案来解决我的问题。我创建了一个小示例以说明问题:
<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'属性提供非空值。”如果移除使用“Binding”属性的条件,则不会引发异常。根据MSDN文档,必须设置Property或Binding属性之一。上述代码的功能表现得像没有设置Binding属性。实际上,在我所有的测试案例中,无论Binding属性设置为什么,都会引发异常。有什么想法吗?