我需要一个具有类似iPhone功能的列表框,用于Silverlight。也就是说,动画滚动,然后单击并拖动以滚动。基于拖动的“速度”,在鼠标向上事件之后滚动将继续一点。我搜索并发现没有控制供应商提供这个。所以问题是我应该如何构建它?我需要一些提示才能开始。
这个问题分为两部分:
第1部分,如何获得列表框的动画滚动。
第2部分,如何建立一个“可拖动的”滚动,我想我应该在上面画一个画布并跟踪mouseevent,并模拟一些物理。这里的一些提示会很棒。
感谢Larsi。
答案 0 :(得分:3)
前段时间我做了一个像这样的控件。我所做的只是将一个堆叠面板放在画布中。只需在鼠标移动时调整整个堆栈面板的canvas.top(按下鼠标时)。要在鼠标添加后为滚动设置动画,您实际上只需要跟踪移动的数量并将动画应用到canvas.top属性。
答案 1 :(得分:2)
这是WPF的一个非常好的完整示例,它同时执行拖动滚动和自动轻弹/惯性滚动。我不确定如果需要更改任何内容以使其在Silverlight中有效。
http://sachabarbs.wordpress.com/2009/12/24/friction-scrolling-now-an-wpf-attached-behaviour-too/
如果您单击捕捉鼠标输入的子项(例如按钮),则只需注意按钮即可单击并拖动视图。我实际上最终修改了这个样本,所以你仍然可以在点击子项时拖动滚动,同时仍然允许孩子在不拖动滚动时接受鼠标输入。
答案 2 :(得分:1)
Silverlight 3比Silverlight 2更容易,但2中并非不可能。
来自MIX 09 Building Microsoft Silverlight Controls的视频应该对您有所帮助。
答案 3 :(得分:1)
Sacha Barber网站的另一篇文章:
Jeremiah Morrill在自定义ContentControl中共享实现动画滚动的代码(使用随附的ScrollViewer进行模板化)
答案 4 :(得分:0)
<ScrollViewer x:Name="sv1" Width="500" Height="285">
<StackPanel x:Name="sp1" Width="450" Height="285">
</StackPanel>
</ScrollViewer>
通过设置pos。和否定。到scrollviewer内的stackpanel的边距 你可以创建一个滚动效果。
onScroll_Up()
{
//Change this based on your scrollviewer dimension
if (this.sv1.ScrollableHeight < 300)
{
Thickness thickness = this.sp1.Margin;
thickness.Top += 50;
this.sv1.SetValue(StackPanel.MarginProperty, thickness);
}
}
onScroll_Down()
{
if (this.sv1.ScrollableHeight > 1)
{
Thickness thickness = this.sp1.Margin;
thickness.Top += -50;
this.sv1.SetValue(StackPanel.MarginProperty, thickness);
}
}