这是这个问题的后续
Increase FontSize for hovered element in WPF ListBox
我有一个列表框,我想要一个“滚动”效果。从一开始,ListBox 中的所有项目的 FontSize 均为 12,当 IsMouseOver="True"时,它们的 FontSize=18。现在我希望 IsMouseOvered 项目下方和上方的项目获得 FontSize 16。我有一种感觉,这并不是那么简单。有人知道吗?
现在这是我的列表框
<ListBox Name="ListBox" ItemsSource="{Binding MyList}" DisplayMemberPath="Property1">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="TextBlock.FontSize" Value="18"/>
</Trigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
谢谢
最佳答案
这在直接 XAML 中很难完成,因为没有任何属性可以让您检查来告诉您鼠标当前是否位于列表中的下一个(或上一个)元素上。
实现此方法的方式:我会为列表中的项目创建一个包装类,该包装类公开属性 IsMouseOver
、FontSize
和 内容
。我将实现一个父类,它维护这些项目的某种可索引集合(例如数组或列表),并注册其项目的 PropertyChanged
事件,以便它可以知道其中的哪个项目鼠标当前悬停的列表。然后,每当当前鼠标悬停的项目发生变化时,父类将负责调整子对象上的 FontSize
。 XAML 所做的全部工作就是绑定(bind)到子对象上的 FontSize
。
顺便说一句,请注意,如果您实现某种很酷的效果(例如 Aaron 链接到的示例中的效果,顺便说一句,它并没有达到您所说的效果),那么在调整元素大小时 IsMouseOver
发生变化,将它们移动到屏幕上,使得鼠标悬停的元素也会发生变化,您的用户会在睡梦中追捕您并杀死您。
关于wpf - ListBox中的滚动效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4444233/