我有一个列表框,显示了相同大小的主题列表。列表框显示了一列带有垂直滚动条的项目。 目前,您可以滚动浏览最后一个项目,以便列表中有1个空白区域(有7个项目的空间,当我滚动到底部时,我会看到6个项目,还有一个空白区域,正好还有1个项目)。 / p>
如何强制滚动条不滚动到最后一项?
答案 0 :(得分:0)
我找到了解决方法。 就我所见,这不是填充和边距问题。
我所做的是为ScrollViewer创建一个行为,我处理ScroolChanged。
行为准则:
class ScrollViewerRestrictedScrollBehavior : Behavior<ScrollViewer>
{
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.ScrollChanged += AssociatedObject_ScrollChanged;
}
void AssociatedObject_ScrollChanged(object sender, ScrollChangedEventArgs e)
{
if (e.VerticalOffset >= MaxItemCount)
{
AssociatedObject.ScrollToVerticalOffset(JumpToItemCount);
}
}
public double MaxItemCount
{
get { return (double)GetValue(MaxItemCountProperty); }
set { SetValue(MaxItemCountProperty, value); }
}
// Using a DependencyProperty as the backing store for MaxItemCount. This enables animation, styling, binding, etc...
public static readonly DependencyProperty MaxItemCountProperty =
DependencyProperty.Register("MaxItemCount", typeof(double), typeof(ScrollViewerRestrictedScrollBehavior), new UIPropertyMetadata(0d));
public double JumpToItemCount
{
get { return (double)GetValue(JumpToItemCountProperty); }
set { SetValue(JumpToItemCountProperty, value); }
}
// Using a DependencyProperty as the backing store for JumpToItemCount. This enables animation, styling, binding, etc...
public static readonly DependencyProperty JumpToItemCountProperty =
DependencyProperty.Register("JumpToItemCount", typeof(double), typeof(ScrollViewerRestrictedScrollBehavior), new UIPropertyMetadata(0d));
}
来自xaml的代码用于使用它(注意我使用非常接近6的值,因此没有看到垂直滚动条中有一个小的跳转) - 这是ListBox样式的一部分:
<ScrollViewer Focusable="false" Padding="{TemplateBinding Padding}"
Template="{StaticResource landmarksScrollViewerControlTemplate}" >
<ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
<i:Interaction.Behaviors>
<ModuleBehaviors:ScrollViewerRestrictedScrollBehavior MaxItemCount="5.99" JumpToItemCount="5.97" />
</i:Interaction.Behaviors>
</ScrollViewer>