1

我的问题是我有一个非常简单的列表框,其中包含项目列表。我注意到当我从 MainPage_Loaded 事件中禁用 ScrollViewer 时,可以通过在任何方向对角滑动 Listbox 来重新启用 ScrollViewer。

我尝试从 XAML 设置属性:

<ListBox ScrollViewer.VerticalScrollBarVisibility="Disabled" ...../>

我也尝试从代码中做到这一点:

var myScrollviewer = VisualTreeHelper.GetChild(MyListBox, 0) as ScrollViewer;
myScrollviewer.HorizontalScrollBarVisibility = ScrollBarVisibility.Disabled;
myScrollviewer.VerticalScrollBarVisibility = ScrollBarVisibility.Disabled;

直接垂直和水平滑动确实表明 ScrollViewer 已禁用,但是当我在不将手从屏幕上抬起的情况下沿对角线滑动时,列表框中的项目开始上下滚动。这种行为似乎是一个错误!

有人可以告诉我如何完全禁用滚动查看器,以便对角线滑动不会暂时重新启用滚动查看器吗?

此行为正在影响我在禁用滚动查看器时拖动项目的下划线任务。

谢谢

4

1 回答 1

1

挺有意思的,以前没注意过。这可能是一个错误,但要解决它,请尝试将 ScrollViewer 的ManipulationMode属性设置Control为让操作系统知道您将在控制级别处理 ScrollViewer,而不是让系统处理它。

<ListBox ScrollViewer.ManipulationMode="Control" 
         ScrollViewer.VerticalScrollBarVisibility="Disabled"
         ScrollViewer.HorizontalScrollBarVisibility="Disabled" .../>

但是,当您重新启用它时,请将其设置ManipulationModeSystem更平滑的滚动。

根据评论更新

要重新启用滚动查看器,请执行此操作

var myScrollviewer = VisualTreeHelper.GetChild(MyListBox, 0) as ScrollViewer;
myScrollviewer.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto;
myScrollviewer.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
//key part - use SetValue to set ManipluationMode.System/Control
myScrollviewer.SetValue(ScrollViewer.ManipulationModeProperty, ManipulationMode.System);

如果您需要再次禁用它,您可以执行相同的操作,但使用禁用的属性和ManipulationMode.Control.

var myScrollviewer = VisualTreeHelper.GetChild(MyListBox, 0) as ScrollViewer;
myScrollviewer.HorizontalScrollBarVisibility = ScrollBarVisibility.Disabled;
myScrollviewer.VerticalScrollBarVisibility = ScrollBarVisibility.Disabled;
//key part - use SetValue to set ManipluationMode.System/Control
myScrollviewer.SetValue(ScrollViewer.ManipulationModeProperty, ManipulationMode.Control);
于 2013-07-30T00:08:30.627 回答