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

时间:2011-05-25 09:06:59

标签: silverlight listbox slider scrollbar

场景:我有一个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>

此ListBox会每60秒自动填充一次RIA服务调用的结果。当应用程序等待LoadOperation完成时,它会显示标准的BusyIndi​​cator,它是Silverlight业务应用程序模板的一部分。

只要用户在定时器事件触发时没有拖动ListBox的滚动条滑块,这就可以正常工作。

问题:如果用户在显示BusyIndi​​cator时拖动滚动条滑块,则滚动条不再起作用,之后。即使释放鼠标左键,看起来鼠标指针仍然会被捕获到滑块。我假设发生这种情况是因为BusyIndi​​cator在拖动时暂时从滑块中取走焦点。

问题:有没有办法找出ListBox的滚动条滑块当前是否被推送?

1 个答案:

答案 0 :(得分:0)

据我所知,没有状态/属性可以确定是否正在按下滑块。

那说你可以尝试通过处理MouseLeftButtonDown and Up事件来自己跟踪它,但你可能还要考虑其他事件,具体取决于你的场景(鼠标滚轮?)

  

MouseLeftButtonUp当鼠标(或手写笔)位于UIElement上时(或当UIElement保持鼠标捕获时)释放鼠标左键(或手写笔的笔尖从平板电脑上移除)时发生。 (继承自UIElement。)

也可以通过使用ReleaseMouseCapture

释放MouseCapture(如果导致问题)来解决这个问题。

同样,它取决于您希望从用户的角度发生什么:跳过数据的加载(这是我更喜欢的,因为我不喜欢滚动时要更改的内容)或重置列表框并滚动到顶部(在我看来很难看)