Silverlight ListBox: Как узнать, перетаскивает ли пользователь в настоящее время ползунок полосы прокрутки? - PullRequest
0 голосов
/ 25 мая 2011

Сценарий: у меня есть ListBox, содержащий WrapPanel из набора инструментов Silverlight в виде 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 автоматически заполняется результатами вызова службы RIA каждые 60 секунд.Пока приложение ожидает завершения LoadOperation, оно отображает стандартный BusyIndicator, который является частью шаблона бизнес-приложения Silverlight.

Это прекрасно работает, если пользователь не перетаскивает ползунок полосы прокрутки ListBox при срабатывании события таймера.

Проблема: если пользователь перетаскивает ползунок полосы прокрутки, когда отображается BusyIndicator, полоса прокрутки больше не работает, впоследствии.Похоже, указатель мыши остается зафиксированным на ползунке, даже если отпустить левую кнопку мыши.Я предполагаю, что это происходит потому, что BusyIndicator временно убирает фокус с ползунка во время его перетаскивания.

Вопрос: Есть ли способ узнать, перемещается ли в данный момент ползунок полосы прокрутки ListBox?*

1 Ответ

0 голосов
/ 25 мая 2011

Насколько я знаю, нет статуса / свойства, чтобы узнать, нажимается ли ползунок.

При этом вы можете попытаться отследить его самостоятельно, обработав MouseLeftButtonDown и Up событий, но вам, возможно, придется учитывать и другие события, в зависимости от вашего сценария (колесо мыши?)

MouseLeftButtonUp Происходит при отпускании левой кнопки мыши (или при удалении кончика стилуса изпланшет), когда мышь (или стилус) находится над элементом UIElement (или когда элемент UIElement удерживает захват мыши).(Унаследовано от UIElement.)

Возможно также решить эту проблему иным способом, освободив MouseCapture (если это вызывает проблему), используя ReleaseMouseCapture

Опять же, это зависит от того, что вы хотите, чтобы происходило с точки зрения пользователя: пропустите загрузку данных (это то, что я бы предпочел, потому что мне не нравится, что содержимое изменяется при прокрутке) илисбросить список и прокрутить вверх (на мой взгляд, безобразно)

...