防止ScrollViewer滚动

3

我该如何防止WPF(3.5)TreeView的滚动事件?

有一个名为ScrollViewer_ScrollChanged的事件,但这不好,因为它是在滚动后调用的,所以我只能撤消滚动,而不能防止滚动。
我正在寻找像这样的东西(伪代码):

ScrollViewer_ScrollChangING(EventParam e)
{
    if (...)
       e.Cancel = true;
}

谢谢

编辑

我想要滚动条,并且用户应该能够滚动,除非发生某些条件 if (...) - 只有在这种情况下,才会动态地阻止滚动。

更确切地说,我希望滚动条仅具有整数位置,因此如果用户滚动到1000.45,则应将其调整为1000。
这是因为否则WPF在树中的位图渲染会有问题...
如果我们允许滚动位置仅为整数,则渲染似乎正常。
(不,SnapToDevicePixels无法帮助,而且不,我们不能使用LayouRouding)


你使用了哪个控件? - Joseph
实际上,这是一个包含3列的网格(Grid)。第一列是一个TreeView(树视图),它正在滚动。但是,我不知道滚动条是属于Tree还是Grid。但是这并不重要,最终都是使用ScrollViewer(滚动查看器)来实现的。 - Zoli
你有没有找到这个问题的答案? - Vultuxe
1
@Vultuxe - 老实说,我不记得了,那是很久以前的事了。 - Zoli
1个回答

0

解决方法可以如下所示:

private void TreeView_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    if (e.OriginalSource is System.Windows.Controls.Border)
    {
    ...your code
    }
}
private void TreeView_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
...your code
}

不,我想要一个滚动条,并希望用户能够使用它。但是,假设当用户尝试滚动到1000的位置时,则不允许这样做。或者无论什么条件,可以看一下我的伪代码示例。if (...) - Zoli
从这个代码中,我怎么知道滚动时的VerticalChange / HorizontalChange是多少?我没有尝试过,但你的建议只会告诉我有人点击了滚动条,对吧?并没有提供具体细节。 - Zoli
已经再次更新了问题,想要知道为什么我需要这个,也许还存在其他解决方案。 - Zoli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接