суббота, 1 января 2022 г.

UserControl Окно против страницы против UserControl для навигации WPF?

 

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

Мои варианты кажутся

  • Окно
  • Страница
  • UserControl

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

Может ли кто-нибудь объяснить мне различия и привести пример того, для каких ситуаций / приложений вы можете использовать каждый из них?

372

Объект Window - это то, на что он похож: это новинка Windowдля вашего приложения. Вы должны использовать его, когда хотите открыть совершенно новое окно. Я не часто использую более одного Windowв WPF, потому что я предпочитаю размещать динамическое содержимое в моем основном окне, которое изменяется в зависимости от действий пользователя.

Страница является страницей внутри окна. Он в основном используется для веб-систем, таких как XBAP, где у вас есть одно окно браузера, и в этом окне могут размещаться разные страницы. Его также можно использовать в навигационных приложениях, как сказал sellmeadog .

UserControl является многоразовым созданный пользователем элемент управления , который вы можете добавить в свой пользовательский интерфейс так же , как вы бы добавить любой другой элемент управления. Обычно я создаю, UserControlкогда хочу встроить некоторые настраиваемые функции (например, a CalendarControl) или когда у меня есть большой объем связанного кода XAML, например, Viewпри использовании шаблона проектирования MVVM.

При переходе между окнами вы можете просто создать новый Windowобъект и показать его.

var NewWindow = new MyWindow();
newWindow.Show();

но, как я сказал в начале этого ответа, я предпочитаю по возможности не управлять несколькими окнами.

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

<Window x:Class="MyNamespace.MainWindow" ...>
    <DockPanel>
        <ContentControl x:Name="ContentArea" />
    </DockPanel>
</Window>

и в своем событии навигации вы можете просто установить его, используя

ContentArea.Content = new MyUserControl();

Но если вы работаете с WPF, я настоятельно рекомендую шаблон проектирования MVVM. В моем блоге есть очень простой пример, который иллюстрирует, как вы будете перемещаться с помощью MVVM, используя этот шаблон:

<Window x:Class="SimpleMVVMExample.ApplicationView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:SimpleMVVMExample"
        Title="Simple MVVM Example" Height="350" Width="525">

   <Window.Resources>
      <DataTemplate DataType="{x:Type local:HomeViewModel}">
         <local:HomeView /> <!-- This is a UserControl -->
      </DataTemplate>
      <DataTemplate DataType="{x:Type local:ProductsViewModel}">
         <local:ProductsView /> <!-- This is a UserControl -->
      </DataTemplate>
   </Window.Resources>

   <DockPanel>
      <!-- Navigation Buttons -->
      <Border DockPanel.Dock="Left" BorderBrush="Black"
                                    BorderThickness="0,0,1,0">
         <ItemsControl ItemsSource="{Binding PageViewModels}">
            <ItemsControl.ItemTemplate>
               <DataTemplate>
                  <Button Content="{Binding Name}"
                          Command="{Binding DataContext.ChangePageCommand,
                             RelativeSource={RelativeSource AncestorType={x:Type Window}}}"
                          CommandParameter="{Binding }"
                          Margin="2,5"/>
               </DataTemplate>
            </ItemsControl.ItemTemplate>
         </ItemsControl>
      </Border>

      <!-- Content Area -->
      <ContentControl Content="{Binding CurrentPageViewModel}" />
   </DockPanel>
</Window>

Скриншот1 Скриншот2

Спросил 
Последняя активность 6 лет 1 месяц назад
Просмотрен 163k раз
264

В чем разница между страницей и окном в WPF при добавлении нового файла в обозреватель решений?

276

Страницы предназначены для использования в приложениях для навигации (обычно с кнопками «Назад» и «Вперед», например, в Internet Explorer). Страницы должны размещаться в NavigationWindow или Frame

Windows - это просто обычное приложение WPF Windows, но может размещать страницы через контейнер фреймов.

  • 21 год
    Если открывается новая страница, предыдущая страница уничтожается, и ее код перестает выполняться, но когда открывается новое окно, оба кода окна запускаются параллельно, если ShowDialog();не используется  7 авг. 
47

Окно всегда отображается независимо, страница предназначена для отображения внутри фрейма или внутри NavigationWindow.

23

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

Вы можете использовать элемент управления Page в элементе управления Window, используя элементы управления NavigationWindow и Frame. Window - это корневой элемент управления, который должен использоваться для хранения / размещения других элементов управления (например, Button) в качестве контейнера. Page - это элемент управления, который может размещаться в других элементах управления контейнера, таких как NavigationWindow или Frame. У элемента управления страницей есть своя собственная цель - служить так же, как и у других элементов управления (например, Button). Страница предназначена для создания браузерных приложений. Итак, если вы размещаете страницу в NavigationWindow, вы получите встроенную реализацию навигации. Страницы предназначены для использования в приложениях для навигации (обычно с кнопками «Назад» и «Вперед», например, в Internet Explorer).

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

Комментариев нет:

Отправить комментарий

Паттерн 'Репозиторий' в ASP.NET

  Последнее обновление: 1.11.2015         Одним из наиболее часто используемых паттернов при работе с данными является паттерн 'Репозито...