这是此问题的后续行动
Increase FontSize for hovered element in WPF ListBox
我有一个ListBox,我想要一个“滚动”效果。从一开始,ListBox中的所有项都有一个FontSize为12,当IsMouseOver =“True”时,它们得到FontSize = 18。现在我希望IsMouseOvered项目下方和上方的项目获得FontSize 16.我有一种感觉,这不是那么直接。有人有任何想法吗?
这是我的ListBox现在
<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>
由于
答案 0 :(得分:2)
这在直接的XAML中很难实现,因为没有可以检查的属性可以告诉您鼠标当前是否在列表中的下一个(或上一个)元素上。
我实现这个的方式:我为列表中的项创建一个包装类,公开属性IsMouseOver
,FontSize
和Content
。我将实现一个父类,它维护这些项目的某种可索引集合(如数组或列表),并注册其项目的PropertyChanged
事件,以便它可以知道列表中的哪个项目老鼠目前正在盘旋。然后,只要当前moused-over项目发生更改,父类就会负责调整子对象上的FontSize
。所有XAML都绑定到子对象上的FontSize
。
顺便说一句,请注意,如果你实现了某种很酷的效果(比如Aaron链接到的示例中的那个,顺便说一下你没有做到你想要的那样)那么,在调整元素的大小时{ {1}}更改,将它们移动到屏幕上,以便鼠标所在的元素也会发生变化,您的用户会在您的睡眠中追捕并杀死您。
答案 1 :(得分:1)
看起来你正在寻找鱼眼效果。 WPF有varying solutions,例如以可重用面板的形式为您提供此行为。他们通常关注图像,但概念是相同的。这个solution显示了纯XAML中的一个例子。
答案 2 :(得分:0)
我写了这个user control,它会模仿Mac的仪表板(鱼眼效果)。