C# WPF ScrollViewer带按钮的水平滚动

C# WPF ScrollViewer带按钮的水平滚动,c#,.net,wpf,C#,.net,Wpf,我在ScrollViewer中有一个水平方向的列表框。当列表增长时,它会自动滚动到最后一个元素。但是,必须为此禁用滚动条。我需要有单独的按钮,这些按钮可以按预定的迭代滚动ScrollViewer(很像滚动条上的按钮)。为此,我尝试了: sv.ScrollToHorizontalOffset(sv.HorizontalOffset + 20); 但是,ScrollViewer的HorizontalOffset似乎始终为0,并且该方法不使用任何值执行任何操作 sv.LineRight(); sv.

我在ScrollViewer中有一个水平方向的列表框。当列表增长时,它会自动滚动到最后一个元素。但是,必须为此禁用滚动条。我需要有单独的按钮,这些按钮可以按预定的迭代滚动ScrollViewer(很像滚动条上的按钮)。为此,我尝试了:

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”方法。您正在使用某种类型的库吗?此答案提供了一种您可以使用的方法: