Silverlight ListBox:如何确定用户当前是否在拖动滚动条滑块?

问题描述

| 场景:我有一个列表框,其中包含Silverlight Toolkit中的WrapPanel作为ItemsPanel:
<ListBox x:Name=\"listBoxFaelle\">
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <toolkit:WrapPanel />
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
    <ListBox.Template>
        <ControlTemplate>
            <Grid>
                <ScrollViewer>
                    <ItemsPresenter />
                </ScrollViewer>
            </Grid>
        </ControlTemplate>
    </ListBox.Template>
</ListBox>
每60秒就会自动使用RIA服务调用的结果填充此列表框。当应用程序等待LoadOperation完成时,它将显示标准的BusyIndi​​cator,它是Silverlight业务应用程序模板的一部分。 只要在Timer事件触发时用户没有拖动ListBox的滚动条滑块,此方法就可以正常工作。 问题:如果在显示BusyIndi​​cator时用户拖动滚动条滑块,此后滚动条将不再起作用。即使释放鼠标左键,鼠标指针看起来仍被捕获到滑块。我认为发生这种情况是因为在拖动时,BusyIndi​​cator暂时将焦点从滑块上移开。 问题:有没有办法找出ListBox的滚动条滑块当前是否被按下?     

解决方法

据我所知,没有状态/属性来确定滑块是否被按下。 也就是说,您可以尝试通过处理MouseLeftButtonDown和Up事件来自己对其进行跟踪,但根据情况(鼠标滚轮?),您可能还必须考虑其他事件。   MouseLeftButtonUp在鼠标(或手写笔)在UIElement上(或UIElement保留鼠标捕获)时,释放鼠标左键(或从平板电脑上移除笔的笔尖)时发生。 (继承自UIElement。) 通过使用ReleaseMouseCapture释放MouseCapture(如果这是引起问题的方法),也可能通过另一种方法解决此问题。 再次,这取决于您希望从用户的角度发生什么:跳过数据加载(这是我希望的,因为我不希望滚动时更改内容)或重置列表框并滚动到顶部(我认为这很丑)     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...