我基本上有一个包含2个全景项目的全景控件,它只包含不同项目的列表。我按照Windows手机上的教程检测用户何时到达列表末尾,然后显示新项目 - fire (call) method, when scrollviewer scrolled to its end,
然而我的问题是我需要这两个列表框,所以我确实注册了2个不同的依赖属性,但是如何将依赖属性“链接”到特定的列表框,因为这两个混合起来。
谢谢
listbox 1
<ListBox Foreground="Black"
x:Name="nuus"
Loaded="nuus_Loaded_1"
ItemsSource="{Binding Story}"
SelectionChanged="nuus_SelectionChanged_1">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Margin="12,2,0,4" Height="105" Width="432">
<Image Width="115" Height="115" Source="{Binding ImageUrl}"/>
<StackPanel Width="311" Margin="8,0,0,0">
<TextBlock Text="{Binding Title}"
TextWrapping="Wrap"
FontWeight="Bold"
Margin="10,0"
Foreground="Black"
FontSize="20"/>
<TextBlock Text="{Binding CreationDate}"
TextWrapping="Wrap"
Foreground="Black"
Margin="10,-2,10,0"
FontSize="20"/>
</StackPanel>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
答案 0 :(得分:0)
这是一个帮助程序类,它提取的功能相同,可以更容易地复制它:
public class ScollViewerEndListener :FrameworkElement
{
public event EventHandler EndOfScrollReached;
private ScrollViewer scrollViewer;
public ScollViewerEndListener()
{
}
public void Init(ScrollViewer scrollViewer)
{
this.scrollViewer = scrollViewer;
var binding = new Binding
{
Source = scrollViewer,
Path = new PropertyPath("VerticalOffset"),
Mode = BindingMode.OneWay
};
SetBinding(ListVerticalOffsetProperty, binding);
}
private void OnListVerticalOffsetChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
var atBottom = scrollViewer.VerticalOffset >= scrollViewer.ScrollableHeight;
if (atBottom)
{
if (EndOfScrollReached != null)
{
EndOfScrollReached(this, null);
}
}
}
public readonly DependencyProperty ListVerticalOffsetProperty;
public double ListVerticalOffset
{
get { return (double)GetValue(ListVerticalOffsetProperty); }
set { SetValue(ListVerticalOffsetProperty, value); }
}
}
您可以在文件中使用,如下所示:
ScollViewerEndListener scrollListenerFirstListBox=new ScollViewerEndListener ();
ScollViewerEndListener scrollListenerSecondListBox=new ScollViewerEndListener ();
在构造函数中:
scrollListenerFirstListBox.EndOfScrollReached += scrollListenerFirstListBox_EndOfScrollReached;
scrollListenerSecondListBox.EndOfScrollReached += scrollListenerSecondListBox_EndOfScrollReached;
加载第一个列表框时:
scrollListenerFirstListBox.Init(ScrollViewerFirstListBox);
加载第二个列表框时:
scrollListenerSecondListBox.Init(ScrollViewerSecondListBox);
这是一个从ListBox获取scrollviewer的函数:
public ScrollViewer GetScrollViewer(DependencyObject parentElement)
{
var count = VisualTreeHelper.GetChildrenCount(parentElement);
for (int i = 0; i < count; i++)
{
var child = VisualTreeHelper.GetChild(parentElement, i);
if (child is ScrollViewer)
{
return child as ScrollViewer;
}
else
{
child = GetScrollViewer(child);
if (child != null)
{
return child as ScrollViewer;
}
}
}
return null;
}
你应该在ListBox中加载这个函数,就像这样:
ScrollViewer scrollViewerListA=this.GetScrollViewer(ListA);
另外需要提及的是,如果您要做的是创建无限滚动,那么推荐的方法是使用windows phone toolkit LongListSelector并遵循此article