gpt4 book ai didi

c# - 动画列表框滚动

转载 作者:太空宇宙 更新时间:2023-11-03 22:02:51 25 4
gpt4 key购买 nike

我有一个垂直的 WPF 列表框,绑定(bind)到一个集合,带有一个自定义的 ItemTemplate。我注意到一些事情:

  1. 与独立的滚动查看器不同,列表框不会连续滚动,而是以与项目高度相等的增量跳跃。在 XAML 的什么地方定义了这种差异(毕竟列表框模板只包含一个滚动查看器?

  2. 是否可以为这个跳跃设置动画?我正在尝试对此进行动画处理,以便它可以快速动画化从一个偏移量到另一个偏移量的跳跃。锦上添花的是动画在结尾处显示一些中间色和“摆动”。我希望为此有一个预定义的行为,但似乎没有。我自己尝试使用 BeginAnimation 在代码隐藏中执行此操作失败,并抛出异常告诉我无法为 Scrollviewer 的 VerticalOffset 属性设置动画。

有什么线索吗?

谢谢汤姆

最佳答案

1-如果想让滚动不跳转,可以把ScrollViewer.CanContentScroll改成False。

<ListBox ScrollViewer.CanContentScroll="False" .... >.....</ListBox>

2- 您可以创建自己的控件,能够为其偏移设置动画。

MyScrollViewer 类

public class MyScrollViewer : ScrollViewer
{
public static readonly DependencyProperty MyOffsetProperty = DependencyProperty.Register(
"MyOffset", typeof(double), typeof(MyScrollViewer),
new PropertyMetadata(new PropertyChangedCallback(onChanged)));

public double MyOffset
{
get { return (double)this.GetValue(ScrollViewer.VerticalOffsetProperty); }
set { this.ScrollToVerticalOffset(value); }
}
private static void onChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
((MyScrollViewer)d).MyOffset = (double)e.NewValue;
}
}

在 MainWindow.xaml 或其他地方

<Grid>
<my:MyScrollViewer x:Name="myScroll">
<ListBox x:Name="myList">

</ListBox>
</my:MyScrollViewer>
<Button Content="Down"
VerticalAlignment="Bottom"
HorizontalAlignment="Right"
Margin="10"
Click="Button_Click" />
</Grid>

主窗口.cs

public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();

for (int i = 1; i < 50; i++)
myList.Items.Add(i);
}

private void Button_Click(object sender, RoutedEventArgs e)
{
double offset = (double)myScroll.GetValue(MyScrollViewer.MyOffsetProperty);
DoubleAnimation goDown = new DoubleAnimation(
offset,
offset + 100,
new Duration(TimeSpan.FromSeconds(2)));
myScroll.BeginAnimation(MyScrollViewer.MyOffsetProperty, goDown);
}
}

关于c# - 动画列表框滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9532817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com