Tom*_*ies 1 c# wpf animation listbox scrollviewer
我有一个垂直的 WPF 列表框,绑定到一个集合,带有一个自定义的 ItemTemplate。我注意到了一些事情:
与独立的滚动查看器不同,列表框不会连续滚动,而是以等于项目高度的增量跳跃。这种差异在 XAML 中的何处定义(列表框模板毕竟只包含一个滚动查看器?
是否可以为这个跳跃设置动画?我正在尝试对此进行动画处理,以便它可以快速为从一个偏移量跳转到另一个偏移量设置动画。锦上添花的是动画在最后显示一些内部和“摆动”。我希望会有一个预定义的行为,但似乎没有。尝试自己在带有 BeginAnimation 的代码中执行此操作失败,抛出的异常告诉我无法对 Scrollviewer 的 VerticalOffset 属性进行动画处理。
有什么线索吗?
谢谢汤姆
1- 如果您希望滚动不跳转,您可以将 ScrollViewer.CanContentScroll 更改为 False。
<ListBox ScrollViewer.CanContentScroll="False" .... >.....</ListBox>
Run Code Online (Sandbox Code Playgroud)
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;
}
}
Run Code Online (Sandbox Code Playgroud)
在 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>
Run Code Online (Sandbox Code Playgroud)
主窗口.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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3164 次 |
| 最近记录: |