Лучший способ реализовать пользовательский интерфейс в стиле WP7 - PullRequest
4 голосов
/ 24 января 2011

Я портирую программу Windows Forms для запуска на Windows Phone 7.

Часть программы Windows представляет собой серию шагов в стиле мастера с кнопками Next и Prev, а также кнопками Save и Cancel.Экраны генерируются из метаданных, хранящихся в базе данных.Некоторые экраны являются необязательными и создаются только после выполнения определенных условий.

Мой вопрос - как это лучше всего реализовать в WP7?

Моя первоначальная идея состояла в том, чтобы использовать сводку, но затем я прочитал Руководство Тима Хойера по Panaroma vs Pivot , где он специально заявляет: «Не используйте pivot / pano для интерфейса на основе мастера».

У меня есть несколько идей - я мог бы сделать каждый экранстраницу (не слишком заинтересованную в этом из-за проблем с задним стеком) или я мог бы использовать одну страницу с элементом управления вкладками - но я не справляюсь с этим по времени и не могу позволить себе тратить дни на неправильный путь.

Есть идеи?Мое приложение WP7 создается с использованием MVVM через Caliburn Micro.

Ответы [ 3 ]

3 голосов
/ 25 января 2011

Я мог бы сделать каждый экран страницей (не слишком заинтересован в этом из-за проблем с задним стеком)

Нелинейная навигация Сервис может помочь вам с обратнойbutton.

Я мог бы использовать одну страницу с элементом управления вкладками

Я создал одно приложение в стиле мастера в WPF, используя рестайлинговый элемент управления Tab.Было немного грязно, хотя работает хорошо.

Сначала вам нужно спроектировать его и рассмотреть несколько сценариев.Что происходит, когда пользователь нажимает кнопку «Назад», запускает кнопку или кто-то звонит пользователю?(когда приложение захоронено и пользователь нажимает кнопку «назад», ОС возвращает последнюю страницу).Навигация очень сложна (дерево решений)?

Сделайте только одну страницу с сеткой с 3 сетками / панелями стека внутри.Разместите их горизонтально с полями 0;480;960. Одновременно может быть показана только одна внутренняя сетка.Вы можете увидеть пример здесь (я пошутил для друзей: P).

Я использовал стековые панели с составным преобразованием.

        <StackPanel Name="questionPanel" Grid.Row="0" HorizontalAlignment="Center">
            <StackPanel.RenderTransform>
             <CompositeTransform TranslateX="480"></CompositeTransform>
            </StackPanel.RenderTransform>

с анимацией

<UserControl.Resources>

    <Storyboard x:Name="centerPanelIn">
        <DoubleAnimation Duration="0:0:0.3" BeginTime="0:0:0.6" To="0"
                         Storyboard.TargetName="centerPanel"
                         Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)">
            <DoubleAnimation.EasingFunction>
                <ExponentialEase Exponent="6.0" EasingMode="EaseOut"></ExponentialEase>
            </DoubleAnimation.EasingFunction>
        </DoubleAnimation>
    </Storyboard>

Когда пользователь нажимает кнопку, добавляется событие Completed.

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        centerPanelOut.Begin();
        centerPanelOut.Completed += new EventHandler(centerPanelOut_Completed);
    }

Этот подход имеет преимущество, потому что все на одной странице, и анимация дает хороший UX.Для более сложного мастера рассмотрите возможность создания собственного UserControl.

1 голос
/ 21 февраля 2012

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

1 голос
/ 24 января 2011

Моя первоначальная мысль - не делать этого и не перепроектировать процесс. Однако, без более глубокого понимания вашей ситуации и приложения вам будет сложно дать соответствующий совет.

Если вы спешите и действительно должны это сделать, я бы порекомендовал использовать одну страницу и обновить модель представления, чтобы создать внешний вид нескольких страниц.

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

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