wpf - ListBox中的滚动效果

标签 wpf xaml listbox mouseover

这是这个问题的后续

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 中很难完成,因为没有任何属性可以让您检查来告诉您鼠标当前是否位于列表中的下一个(或上一个)元素上。

实现此方法的方式:我会为列表中的项目创建一个包装类,该包装类公开属性 IsMouseOverFontSize内容。我将实现一个父类,它维护这些项目的某种可索引集合(例如数组或列表),并注册其项目的 PropertyChanged 事件,以便它可以知道其中的哪个项目鼠标当前悬停的列表。然后,每当当前鼠标悬停的项目发生变化时,父类将负责调整子对象上的 FontSize。 XAML 所做的全部工作就是绑定(bind)到子对象上的 FontSize

顺便说一句,请注意,如果您实现某种很酷的效果(例如 Aaron 链接到的示例中的效果,顺便说一句,它并没有达到您所说的效果),那么在调整元素大小时 IsMouseOver 发生变化,将它们移动到屏幕上,使得鼠标悬停的元素也会发生变化,您的用户会在睡梦中追捕您并杀死您。

关于wpf - ListBox中的滚动效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4444233/

相关文章:

c# - 在 MVVM 中一次更新 2 个属性

c# - DataGridComboBoxColumn 不显示 SelectedItem

c# - 使用字体时 WPF TextBlock 内存泄漏

wpf - ListBox 中的所有 ComboBox 在其中任何一个更改时都会更改

c# - 无法将字符串添加到列表框

wpf - 如何在wpf中为用户控件设置透明

wpf - 逻辑组合依赖属性

wpf - 触发时无法显示下划线

wpf - 如何从滚动查看器中的最后一项中删除额外的边距?

c# - 隐藏复选框,但显示其内容