(分享)listbox组件,滑动到列表底部时,会触发请求控件(附源码)
<ListBox ItemsSource="{Binding Items}"
u:ScrollViewerMonitor.AtEndCommand="{Binding FetchMoreDataCommand}" />
static void element_Loaded(object sender, RoutedEventArgs e)
{
FrameworkElement element = (FrameworkElement)sender;
element.Loaded -= element_Loaded;
ScrollViewer scrollViewer = FindChildOfType<ScrollViewer>(element);
if (scrollViewer == null)
{
throw new InvalidOperationException("ScrollViewer not found.");
}
var listener = new DependencyPropertyListener();
listener.Changed
+= delegate
{
bool atBottom = scrollViewer.VerticalOffset
>= scrollViewer.ScrollableHeight;
if (atBottom)
{
var atEnd = GetAtEndCommand(element);
if (atEnd != null)
{
atEnd.Execute(null);
}
}
};
Binding binding = new Binding("VerticalOffset") { Source = scrollViewer };
listener.Attach(scrollViewer, binding);
}
全部原文以及源代码下载:
http://www.hugwp.com/thread-2225-1.html
建了一个wp开发的群,正在开发应用的同学加入讨论吧 Q群号 172765887
讨论wp7的相关应用,前景,框架,发布,疑难杂症等。
看好wp7并正在开发自己或商业应用的同学请加入吧。 --------------------编程问答-------------------- 谢谢分享。 --------------------编程问答-------------------- FindChildOfType经常找不到ListBox的ScrollViewer ,楼主知道是怎么回事吗 --------------------编程问答-------------------- 找不到是因为你找的时机不对,这时候listbox肯定是还没有内容所以就不存在ScrollViewer,你等listbox内容填充好了再找就能找到了 --------------------编程问答-------------------- 这个方法,我试过,没太好使~~主要也是找不到scrollviewer 我这有另外一个方法,我这使用是完全没问题
<Grid x:Name="LayoutRoot" Background="Transparent">
<ListBox HorizontalAlignment="Left" Margin="0,6,0,0" Name="listBox1" VerticalAlignment="Top" Width="460" >
<ListBox.Template>
<ControlTemplate TargetType="ListBox">
<ScrollViewer BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Foreground="{TemplateBinding Foreground}" Padding="{TemplateBinding Padding}" ManipulationCompleted="ListBox_ManipulationCompleted">
<Grid>
<ItemsPresenter/>
</Grid>
</ScrollViewer>
</ControlTemplate>
</ListBox.Template>
</ListBox>
</Grid>
--------------------编程问答-------------------- 加精了!不错! --------------------编程问答-------------------- 刚发现wp上也是在用C#啊。 - - --------------------编程问答--------------------
void ListBox_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e)
{
ScrollViewer bar = sender as ScrollViewer;
if (bar != null)
{
// 如果是向下拖动并且已经在ListBox底端
if (e.TotalManipulation.Translation.Y < 0 && bar.VerticalOffset >= bar.ScrollableHeight)
{
///想做的动作
}
}
}
谢谢分享! --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 没开发过wp,不过怎么感觉和WPF的语法这么类似,包括常用类,绑定属性,UI的xaml语法。。
求释疑 --------------------编程问答--------------------
silverlight,windows phone,wpf,metro style 的UI都是用xaml来实现
当然了,包括依赖属性,路由事件,数据绑定,样式资源等特性都是通用的了。 --------------------编程问答-------------------- --------------------编程问答-------------------- 感谢分享!! --------------------编程问答-------------------- 很好。 --------------------编程问答-------------------- --------------------编程问答-------------------- 支持!!! --------------------编程问答-------------------- 谢谢,学习了 --------------------编程问答-------------------- --------------------编程问答-------------------- 支持!!! --------------------编程问答-------------------- 看看是什么 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- WP7是否用C#开发的? --------------------编程问答-------------------- 从.net framework的所设计应用场景 String.Concat的重载方法,方法参数是(param object[]),你可以传入int,string,point,等值类型和引用类型,当你传入值类型变量,就会发生装箱的操作。再比如说方法调用声明一个Int类型的变量i,i调用父类方法GetType,因为i为值类型,想要调用父类方法就必须装箱,然后通过装箱后的对象来查找上级类型对象指针,查找方法表中所调用的方法,传入this实参,这也是装箱的应用场景
--------------------编程问答--------------------
补充:移动开发 , Windows Phone