C# WPF ScrollViewer带按钮的水平滚动
我在ScrollViewer中有一个水平方向的列表框。当列表增长时,它会自动滚动到最后一个元素。但是,必须为此禁用滚动条。我需要有单独的按钮,这些按钮可以按预定的迭代滚动ScrollViewer(很像滚动条上的按钮)。为此,我尝试了:C# WPF ScrollViewer带按钮的水平滚动,c#,.net,wpf,C#,.net,Wpf,我在ScrollViewer中有一个水平方向的列表框。当列表增长时,它会自动滚动到最后一个元素。但是,必须为此禁用滚动条。我需要有单独的按钮,这些按钮可以按预定的迭代滚动ScrollViewer(很像滚动条上的按钮)。为此,我尝试了: sv.ScrollToHorizontalOffset(sv.HorizontalOffset + 20); 但是,ScrollViewer的HorizontalOffset似乎始终为0,并且该方法不使用任何值执行任何操作 sv.LineRight(); sv.
sv.ScrollToHorizontalOffset(sv.HorizontalOffset + 20);
但是,ScrollViewer的HorizontalOffset似乎始终为0,并且该方法不使用任何值执行任何操作
sv.LineRight();
sv.LineLeft();
两者都不起作用,可能是因为惟一的子元素是ListBox。
如果我将列表框的方向更改为垂直,则ScrollViewer的垂直偏移会随着滚动/添加新元素而更改,ScrollToVerticalOffset工作正常。为什么这与水平方向不同?还有其他解决办法吗
注意:这是在没有使用XAML放置控件的情况下完成的。要实现这一点,您需要做几件事: 卸下外部的
ScrollViewer
,只需使用内置在列表框中的ScrollViewer
var scrollViewer = ListBox.FindChildByType<ScrollViewer>();
在列表框上设置以下属性:
ScrollViewer.CanContentScroll="False"
这将使HorizontalOffset
属性以像素为单位工作。当设置为True
时,它在项目中工作
ScrollViewer.HorizontalScrollBarVisibility="Hidden"
这将保持滚动活动,但会隐藏滚动条
在您的代码中,您可以获得列表框的ScrollViewer
,如下所示。在本例中,我的ListBox
被命名为x:Name=“ListBox”
var scrollViewer=ListBox.FindChildByType();
最后,您可以如下所示设置偏移。在我的示例中,我创建了一个方法,并从按钮单击事件处理程序中传入了一个值
private void ScrollHorizontally(double offset)
{
var scrollViewer = ListBox.FindChildByType<ScrollViewer>();
scrollViewer?.ScrollToHorizontalOffset(scrollViewer.HorizontalOffset + offset);
}
private void水平滚动(双偏移)
{
var scrollViewer=ListBox.FindChildByType();
scrollViewer?.ScrollToHorizontalOffset(scrollViewer.HorizontalOffset+offset);
}
“ScrollViewer中的列表框…”一开始似乎没有什么意义。ListBox已经支持滚动。而且它有一个ScrollIntoView方法。@Clemens谢谢你,但我的想法是我需要将滚动位置移动一组像素,而不仅仅是滚动到一个项目。我的列表框不包含“FindChildByType”方法。您正在使用某种类型的库吗?此答案提供了一种您可以使用的方法: