Как я могу извлечь элемент управления из его контейнера, чтобы сделать его полноэкранным при нажатии в Silverlight / Wp7? - PullRequest
1 голос
/ 17 августа 2011

Итак, у меня есть элемент управления Panorama, и PanoramaItems программно добавляются к элементу управления с использованием следующего шаблона.

<UserControl>
    <Grid x:Name="LayoutRoot">
            <controls:PanoramaItem Name="sitePanoramaItem" Header="{Binding Name}">
            <Controls:DockPanel VerticalAlignment="Stretch">
                <StackPanel Orientation="Horizontal" Margin="0,10,0,0" Controls:DockPanel.Dock="Top">
                    <Image Source="../Images/action.png" Width="64"  />
                    <TextBlock Text="{Binding Stats, Mode=TwoWay}" FontSize="45" Margin="15,0,0,0" />
                </StackPanel>
                <Grid x:Name="graphCanvas" HorizontalAlignment="Stretch" Margin="10,10,10,10">    </Grid>
            </Controls:DockPanel>
        </controls:PanoramaItem>
    </Grid>
</UserControl>

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

Я бы хотел сохранить функциональность управления Панорамой, чтобы graphCanvas оставался единственным видимым, но вы можете переключаться между ними.В настоящее время у меня это работает, так как я удаляю сетку из DockPanel и помещаю ее прямо в LayoutRoot, в то время как sitePanoramaItem свернут.Тем не менее, он не является полноэкранным, так как имя Панорамы все еще видно (я думаю, я мог бы это также скрыть ...) Когда я помещаю graphCanvas обратно в него DockPanel, размер холста полностью облажается.

Я надеялся, что есть более простой способ.

Возможно ли это?

Ответы [ 2 ]

2 голосов
/ 17 августа 2011

Можно создать интерфейс, который вы описываете, но он не будет простым.Вы на правильном пути: удалите его из кода, добавьте LayoutRoot и сделайте Panorama скрытой.Однако вам придется кодировать поведение прокрутки самостоятельно, и это будет довольно сложно - особенно если вы почувствуете, как работает панорама.

Один трюк, который вы можете попробовать, - это на самом деле наложить PivotControl поверх вашей Панорамы.и он будет свернут по умолчанию.Также отредактируйте шаблон, чтобы удалить все содержимое по умолчанию, например: удалите элемент управления заголовка, установите поля в 0 и т. Д.)Затем, когда вы захотите перейти в полноэкранный режим, вы можете удалить все графические графы из элементов Panorama и добавить их в новые элементы PivotItem в PivotControl.Затем скройте Панораму и покажите Пивот.Это даст вам возможность прокрутки бесплатно и иллюзию полного экрана.

Сказав все это, я не уверен, что рекомендую это.Более распространенный подход состоит в том, чтобы просто перейти на другую страницу, когда пользователь выбирает элемент и обрабатывать там полноэкранные аспекты (возможно, снова используя элемент управления Pivot для прокрутки).А если вы хотите выйти из полноэкранного режима, просто вернитесь на первую страницу.С этим подходом, с одной стороны, будет намного проще справиться с полноэкранным состоянием.

1 голос
/ 17 августа 2011

Вы можете попробовать сделать GraphCanvas Page и поместить его в другой XAML.Затем добавьте фрейм (например, назовите его InnerFrame) в том же месте, где у вас есть graphCanvas, и перейдите на эту страницу с помощью InnerFrame.При щелчке по фрейму вы переходите с помощью RootFrame приложения на свою страницу graphCanvas.Когда вы решите закрыть его, просто вернитесь назад с RootFrame.

Надеюсь, это достаточно ясно:)

Редактировать: Навигация в WP7 работает очень похоже на стандартную навигациюв Silverlight 4, но это немного более ограничительно.Просто добавьте PhoneApplicationFrame в свой XAML следующим образом:

<phone:PhoneApplicationFrame x:Name="Frame" />

Это в основном то же самое, что и фрейм Silverlight.Все страницы, которые вы создаете, наследуются от PhoneApplicationPage по умолчанию, поэтому они могут отображаться в рамке без каких-либо изменений.

Все ваше приложение фактически работает в PhoneApplicationFrame.Если вы посмотрите на класс своего приложения, вы увидите следующее:

public PhoneApplicationFrame RootFrame { get; private set; }

Вот документация MSDN для навигационной системы на WP7

...