C# 依赖属性混淆了吗?
我基本上有一个带有2个全景项目的全景控件,它只包含不同项目的列表。我按照windows phone上的教程来检测用户何时到达列表的末尾,然后显示新项目- 然而,我的问题是,我需要这两个列表框,所以我注册了两个不同的依赖属性,但是我如何将依赖属性与特定的列表框“链接”,因为这两个属性混淆了 多谢各位 列表框1C# 依赖属性混淆了吗?,c#,windows-phone-7,windows-phone-8,windows-phone,dependency-properties,C#,Windows Phone 7,Windows Phone 8,Windows Phone,Dependency Properties,我基本上有一个带有2个全景项目的全景控件,它只包含不同项目的列表。我按照windows phone上的教程来检测用户何时到达列表的末尾,然后显示新项目- 然而,我的问题是,我需要这两个列表框,所以我注册了两个不同的依赖属性,但是我如何将依赖属性与特定的列表框“链接”,因为这两个属性混淆了 多谢各位 列表框1 <ListBox Foreground="Black" x:Name="nuus"
<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>
这里有一个helper类,它提取了相同的功能,以便能够更轻松地复制它:
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 ();
ScrollViewer scrollViewerListA=this.GetScrollViewer(ListA);
在构造函数中:
scrollListenerFirstListBox.EndOfScrollReached += scrollListenerFirstListBox_EndOfScrollReached;
scrollListenerSecondListBox.EndOfScrollReached += scrollListenerSecondListBox_EndOfScrollReached;
加载第一个列表框时:
scrollListenerFirstListBox.Init(ScrollViewerFirstListBox);
scrollListenerSecondListBox.Init(ScrollViewerSecondListBox);
加载第二个列表框时:
scrollListenerFirstListBox.Init(ScrollViewerFirstListBox);
scrollListenerSecondListBox.Init(ScrollViewerSecondListBox);
以下是从列表框获取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;
}
还有一件事要提的是,如果你想做的是创建一个无限滚动,推荐的方法是使用LongListSelector并遵循此操作,并且让您知道它是否工作。当列表框加载时,您从哪里获得ScrollViewerFirstListBox和ScrollViewerSecondListbox?我已经添加了我的第一个列表框的外观,并更新了获取scrollviewer的方法,还添加了一个链接,指向建议的无限滚动方式(如果您正尝试这样做的话)