Реализация уведомления о прогрессе LongPress в Windows Phone 7 - PullRequest
0 голосов
/ 06 января 2012

Как я могу отслеживать ход длинного нажатия на StackPanel с прикрепленным контекстным меню Silverlight Toolkit?

У меня есть элемент управления LongListSelector.Шаблон элемента имеет StackPanel с:

<toolkit:ContextMenuService.ContextMenu>
                <toolkit:ContextMenu IsZoomEnabled="True">
                    <toolkit:MenuItem Header="Delete" Click="MenuItem_Click" />
                    <toolkit:MenuItem Header="Upload" />
                </toolkit:ContextMenu>
</toolkit:ContextMenuService.ContextMenu>

контекстным меню, прикрепленным стандартным способом.Всякий раз, когда пользователь нажимает и удерживает панель стека, в течение следующих нескольких секунд появляется контекстное меню.

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

enter image description here

Более показательно в видео: http://www.youtube.com/watch?v=radnJgI88dA

Могу ли я подключиться к прогрессу Press, чтобы реализовать его с помощьюконтекстного меню набора инструментов Silverlight?Если нет, то как мне этого добиться?

Я знаю, что мне просто нужно установить значение ProgessBar, но как я могу получить запуск событий прогресса?Является ли начало отсчета с моим собственным таймером единственным способом?

1 Ответ

0 голосов
/ 06 января 2012

В элементе управления ContextMenu такого события нет.Вы можете реализовать это самостоятельно, обрабатывая сенсорные события (такие как MouseLeftButtonDown и т. Д.) И DispatcherTimer для измерения прошедшего времени.

Кроме того, Silverlight Toolkit - это библиотека с открытым исходным кодом, поэтому вы можете изменить ContextMenuуправляйте таким поведением для всех подключенных ContextMenu, где вам это нужно.

UPD:

Я создал простую анимацию.Результат как на видео

    <Storyboard x:Name="progress">
        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(RangeBase.Value)" Storyboard.TargetName="progressBar">
            <EasingDoubleKeyFrame KeyTime="0" Value="0"/>
            <EasingDoubleKeyFrame KeyTime="0:0:0.9" Value="100"/>
        </DoubleAnimationUsingKeyFrames>
        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="progressBar">
            <EasingDoubleKeyFrame KeyTime="0" Value="1"/>
            <EasingDoubleKeyFrame KeyTime="0:0:0.9" Value="1"/>
            <EasingDoubleKeyFrame KeyTime="0:0:1" Value="0"/>
        </DoubleAnimationUsingKeyFrames>
    </Storyboard>

И есть логика для управления этой анимацией.Rectangle является родителем ContextMenu

    private void Rectangle_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
    {
        progress.Begin();
    }

    private void LayoutRoot_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
    {
        progress.Stop();
    }
...