Tim*_*Tim 5 c# xaml windows-phone-7 windows-phone windows-phone-8
在我的Windows Phone应用程序中,我在页面上有两个LongListSelectors并排.我想这样做,以便当用户滚动其中一个时,另一个滚动相同的数量.
两者的LongListSelectorsItemTemplates总是具有相同的高度.您可以将此视为模仿Excel中的冻结列(左侧LongListSelector仅垂直滚动,右侧水平和垂直滚动.
任何人都可以指出我正确的方向如何做到这一点?我愿意在代码隐藏中做这件事,或者如果不能用绑定做的话.
您可以通过挂接到 LongListSelector 的 ViewportControl 来完成此操作。当一个 LLS 的视口更改时,更改另一 LLS 的视口。我猜你只需要两个 LLS,所以一个 DependencyProperty 就可以解决问题。我写了一篇博客,其中包含有关如何实现此目标的所有详细信息。
缺点是需要 DependencyProperty
public double ScrollPosition
{
get { return (double)GetValue(ViewPortProperty); }
set { SetValue(ViewPortProperty, value); }
}
public static readonly DependencyProperty ViewPortProperty = DependencyProperty.Register(
"ScrollPosition",
typeof(double),
typeof(MyLongListSelector),
new PropertyMetadata(0d, OnViewPortChanged));
Run Code Online (Sandbox Code Playgroud)
并在视口发生变化时设置该属性。
private void OnViewportChanged(object sender, ViewportChangedEventArgs args)
{
ScrollPosition = _viewport.Viewport.Top;
}
Run Code Online (Sandbox Code Playgroud)
然后将该属性绑定到 xaml 中的每个 LLS
<dataBoundApp1:MyLongListSelector x:Name="MainLongListSelector" ItemsSource="{Binding Items}"
ScrollPosition="{Binding ScrollPosition, ElementName=MainLongListSelector2, Mode=TwoWay}"/>
<dataBoundApp1:MyLongListSelector x:Name="MainLongListSelector2" ItemsSource="{Binding Items}" Grid.Column="1"
ScrollPosition="{Binding ScrollPosition, ElementName=MainLongListSelector, Mode=TwoWay}"/>
Run Code Online (Sandbox Code Playgroud)