none
Переключение подформ в WPF RRS feed

  • Вопрос

  •  

    Привет всем!

    Как в WPF делается переключение экранов (подформ) в форме (аля KIS 2010)? Т.е. допустим есть левосторонняя менюшка с иерархией, при выборе определенного пункта меню, правая часть переключалась на нужную "подформу". Например, в WinForms, это можно сделать наложением друг на друга панелей и управлять ими через Visible, а в Design-Time выбирать нужную панель как переднюю. 

    В WPF так не получается, т.к. нельзя переключаться между панелями (или гридами) в Design-Time. TabControl не подходит, т.к. нужна именно иерархия вкладок.

    • Перемещено Tagore Bandlamudi 2 октября 2010 г. 22:14 MSDN Forums consolidation (От:Разработка Windows-приложений)
    2 ноября 2009 г. 1:02

Ответы

  • Вы можете создать отдельную wpf-страницу для каждой вкладки, на главной форме разместить элемент Frame, и при щелчке в меню вызывать метод Frame.Navigate(Uri page) для загрузки в фрэйм необходимого содержимого.
    <Frame Margin="63,12,12,24" Name="frame1" />
            <Button HorizontalAlignment="Left" Name="button1" Width="75"
                    Grid.Row="1" Margin="0,21,0,0" Click="button1_Click">Button</Button>
    
    
            private void button1_Click(object sender, RoutedEventArgs e)
            {
                frame1.Navigate(new Uri("pack://application:,,,/Page1.xaml"));
            }

    http://msdn.microsoft.com/ru-ru/library/system.windows.controls.frame.aspx
    • Помечено в качестве ответа Владимир Д 2 ноября 2009 г. 13:32
    2 ноября 2009 г. 8:37

Все ответы

  • Вы можете создать отдельную wpf-страницу для каждой вкладки, на главной форме разместить элемент Frame, и при щелчке в меню вызывать метод Frame.Navigate(Uri page) для загрузки в фрэйм необходимого содержимого.
    <Frame Margin="63,12,12,24" Name="frame1" />
            <Button HorizontalAlignment="Left" Name="button1" Width="75"
                    Grid.Row="1" Margin="0,21,0,0" Click="button1_Click">Button</Button>
    
    
            private void button1_Click(object sender, RoutedEventArgs e)
            {
                frame1.Navigate(new Uri("pack://application:,,,/Page1.xaml"));
            }

    http://msdn.microsoft.com/ru-ru/library/system.windows.controls.frame.aspx
    • Помечено в качестве ответа Владимир Д 2 ноября 2009 г. 13:32
    2 ноября 2009 г. 8:37
  • Помимо пейджинга, старый добрый метод установки Visible должен работать, хотя в дизайнере конечно ничего видно не будет, т.к. по крайней мере 2008 студия не способна по клику делать превью.
    - Dmitri Nesteruk
    2 ноября 2009 г. 9:06
  • Спасибо, OlegGel. Похоже это то, что нужно. Единственно смущает то, что Page - это браузерный вариант Window. Есть ли у него какие-нибудь ограничения относительно Window (кроме кнопок сворачивания и закрытия)?

    2 ноября 2009 г. 12:50
  • Немного добавлю WPF Page vs WPF Window
    2 ноября 2009 г. 13:27
  • А Таб Контрол чем не катит? По-моему лучше всего подошел бы. Что мешает вам скрыть таб хэдеры? Если самому лень - так есть и готовые. Иерархию в таком случае можно реализовать либо руками на онклик, либо вложением таб контролов

    • Предложено в качестве ответа No Thanks_ 5 ноября 2009 г. 20:55
    5 ноября 2009 г. 20:55