dir.by  
  Поиск  
Программирование, разработка, тестирование
WPF. Windows Presentation Foundation (отдельное приложение exe файл)
WPF приложение с библиотекой Prism (MVVM шаблон проектирования)
WPF приложение с Prism Unity. В приложении Tab и разделения на отдельные xaml используя Region.
  Посмотрели 4837 раз(а)    
 WPF приложение с Prism Unity. Приложение разделено на Tab (вкладки), каждая вкладка в отдельном xaml используя Region. 
последнее обновление: 17 мая 2022
Скачать пример
WpfPrismRegion ...
размер: 35 kb
Результат примера
Исходники программы
D:/WpfPrismRegion
        App.xaml
        App.xaml.cs

        ViewModels
                MainWindowViewModel.cs
                BooksViewModel.cs
                FilmsViewModel.cs

        Views
                BooksView.xaml
                BooksView.xaml.cs
                FilmsView.xaml
                FilmsView.xaml.cs
                MainWindow.xaml            устанавливаем регион prism:RegionManager.RegionName="BooksRegion" и т.д.
                MainWindow.xaml.cs        показываем регоин: regionManager.RequestNavigate или regionManager.RegisterViewWithRegion
1) Файлы App.xaml и App.xaml.cs
Файл App.xaml
  Xaml  
<prism:PrismApplication
 
    x:Class="WpfPrism.App"
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     xmlns:prism="http://prismlibrary.com/">

     <Application.Resources>
     </Application.Resources>

</prism:PrismApplication>
Файл App.xaml.cs
  C#  
using Prism.Ioc;
using Prism.Unity;
using System.Windows;

namespace WpfPrism
{
     public partial class App : PrismApplication
     {
          protected override void RegisterTypes(IContainerRegistry containerRegistry)
          {
               containerRegistry.RegisterForNavigation<MainWindow, ViewModels.MainWindowViewModel>();
               containerRegistry.RegisterForNavigation<FilmsView, ViewModels.FilmsViewModel>();
               containerRegistry.RegisterForNavigation<BooksView, ViewModels.BooksViewModel>();
          }

          protected override Window CreateShell()
          {
               return Container.Resolve<MainWindow>();
          }
     }
}
2) ViewModels
Файл MainWindowViewModel.cs
  C#  
using Prism.Mvvm;

namespace WpfPrism.ViewModels
{
     public class MainWindowViewModel : BindableBase
     {
          public MainWindowViewModel()
          {
          }
     }
}
Файл FilmsViewModel.cs
  C#  
using Prism.Mvvm;

namespace WpfPrism.ViewModels
{
     public class FilmsViewModel : BindableBase
     {
          public string FilmNames { get; set; }

          public FilmsViewModel()
          {
               FilmNames = "My films: Star Wars, Rockkie";
          }

     }
}
Файл BooksViewModel.cs
  C#  
using Prism.Mvvm;

namespace WpfPrism.ViewModels
{
     public class BooksViewModel : BindableBase
     {
          public string BookNames { get; set; }

          public BooksViewModel()
          {
               BookNames = "My books: book1, book2";
          }

     }
}
3) Views
Файл FilmsView.xaml
  Xaml  
<UserControl x:Class="WpfPrism.FilmsView"
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
          xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
          mc:Ignorable="d"
          xmlns:prism="http://prismlibrary.com/"
          prism:ViewModelLocator.AutoWireViewModel="True"
          Height="450" Width="800">

     <Grid>
          <TextBlock Text="{Binding FilmNames}"></TextBlock>
     </Grid>

</UserControl>
Файл FilmsView.xaml.cs
  C#  
using System.Windows.Controls;

namespace WpfPrism
{
     public partial class FilmsView : UserControl
     {
          public FilmsView()
          {
               InitializeComponent();
          }
     }
}
Файл BooksView.xaml
  Xaml  
<UserControl x:Class="WpfPrism.BooksView"
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
          xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
          mc:Ignorable="d"
          xmlns:prism="http://prismlibrary.com/"
          prism:ViewModelLocator.AutoWireViewModel="True"
          Height="450" Width="800">

     <Grid>
          <TextBlock Text="{Binding BookNames}"></TextBlock>
     </Grid>

</UserControl>
Файл BooksView.xaml.cs
  C#  
using System.Windows.Controls;

namespace WpfPrism
{
     public partial class BooksView : UserControl
     {
          public BooksView()
          {
               InitializeComponent();
          }
     }
}
Файл MainWindow.xaml
  Xaml  
<Window x:Class="WpfPrism.MainWindow"
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
          xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
          xmlns:mvvm="http://prismlibrary.com/"
          mc:Ignorable="d"
          xmlns:prism="http://prismlibrary.com/"
          prism:ViewModelLocator.AutoWireViewModel="True"
          Title="MainWindow" Height="450" Width="800">

     <Grid>
          <TabControl>
               <TabItem Header="Books">
                    <ContentControl mvvm:RegionManager.RegionName="BooksRegion"></ContentControl>
               </TabItem>

               <TabItem Header="Films">
                    <ContentControl mvvm:RegionManager.RegionName="FilmsRegion"></ContentControl>
               </TabItem>
          </TabControl>
     </Grid>

</Window>

Вариант 1.
Файл MainWindow.xaml.cs
  C#  
using System.Windows;
using Prism.Regions;

namespace WpfPrism
{
     public partial class MainWindow : Window
     {
          public MainWindow(IRegionManager regionManager)
          {
               InitializeComponent();

               regionManager.RegisterViewWithRegion("FilmsRegion", typeof(FilmsView));
               regionManager.RegisterViewWithRegion("BooksRegion", typeof(BooksView));
          }
     }
}


Вариант 2.
Файл MainWindow.xaml.cs
  C#  
using System.Windows;
using Prism.Regions;

namespace WpfPrism
{
     public partial class MainWindow : Window
     {
          public MainWindow(IRegionManager regionManager)
          {
               InitializeComponent();

               Loaded += (sender, routedEventArgs) =>
               {
                    regionManager.RequestNavigate("FilmsRegion", new Uri(nameof(FilmsView), UriKind.Relative), new NavigationParameters() /*parameters*/);
                    regionManager.RequestNavigate("BooksRegion", new Uri(nameof(BooksView), UriKind.Relative), new NavigationParameters() /*parameters*/);
               };
          }
     }
}
На заметку1!
Метод regionManager.RegisterViewWithRegion и regionManager.RequestNavigate отличаются только тем что в regionManager.RequestNavigate можно передавать параметры.

На заметку2!
Метод regionManager.RequestNavigate обязательно нужно вызывать внутри Loaded (то есть когда компонента проинициализирована)
  C#  
InitializeComponent();

Loaded += (sender, routedEventArgs) =>
{
     regionManager.RequestNavigate("FilmsRegion", new Uri(nameof(FilmsView), UriKind.Relative), new NavigationParameters() /*parameters*/);
}
Читать подробную ниформацию "Navigation Using the Prism Library for WPF"
 
← Предыдущая тема
Создаем новое WPF приложение с Prism Unity (разделение проекта на папки Services, Views, ViewModels). Патерн MVVM (Model-View-ViewModel) | C#
 
Следующая тема →
Создаем новое WPF приложение с Locator (разделение проекта на папки Views, ViewModels)
 
Ваши Отзывы ... комментарии ...
   
Вашe имя
Ваш комментарий (www ссылки может добавлять только залогиненный пользователь)

  Объявления  
  Объявления  
 
WPF простое новое приложение
Создаем новое WPF приложение | C#
WPF layout
Делаем layout с DockPanel и StackPanel в WPF
События
Пример "Получаем координаты мыши при нажатии левой клавишей мыши на TextBlock"| координаты экрана и относительные координаты | C# WPF приложение
Пример "Получаем координаты мыши при нажатии левой клавишей мыши на Button"| координаты экрана и относительные координаты | C# WPF приложение
Пример "Получаем координаты мыши при нажатии левой клавишей мыши на Grid и рисуем линию"| C# WPF приложение
Пример "При двойном нажатии левой клавишей мыши на Grid показываем сообщение"| C# WPF приложение
WPF элементы
Label
Пример "Устанавливаем текст в Label" через c# код | WPF приложение
иконки FontAwesome
Пример "Показываю иконки, для иконки подключаю библиотеку fontawesome5" | C# WPF приложение
Пример "Делаю анимацию для иконки, библиотека fontawesome5" | C# WPF приложение
 
TextBlock
Пример "Устанавливаем текст в TextBlock используя Binding". Еще добавим двойной Bindning используя INotifyPropertyChanged | C# WPF приложение
Пример "Несколько TextBlock (показываем тексты) и делаем так чтобы при mouse move выделялся элемент где мышка (mouse over)" | C# WPF приложение
Пример "Получаем координаты мыши при нажатии левой клавишей мыши на TextBlock"| координаты экрана и относительные координаты | C# WPF приложение
Button
Пример "Получаем координаты мыши при нажатии левой клавишей мыши на Button"| координаты экрана и относительные координаты | C# WPF приложение
TextBox
Пример "Устанавливаем и получаем текст в TextBox используя Binding" | C# WPF приложение
Пример "Устанавливаем текст в TextBox" через c# код | WPF приложение
 
TextBox с Place Holder
Пример "Показываем Place Holder в TextBox" | WPF приложение
Пример "Показываем Place Holder с иконкой в TextBox", для иконки подключаю библиотеку fontawesome5 | WPF приложение
 
TextBox с проверкой текста (валидация)
Пример "Устанавливаем текст в TextBox используя Binding и делаем валидацию (если текст не правильный)" | C# WPF приложение
 
ComboBox
Пример "В ComboBox делаем редактирование текста. Получаем текст используя Binding" | C# WPF приложение
 
ItemsControl
Пример "ItemsControl, кнопка и обработчик нажатия" | WPF приложение
Grid
Что такое Grid в WPF
Как добавить RowDefinition, ColumnDefinition в Grid (мышкой в XAML design editor) | C# WPF приложение
В Grid добавляем vertical scrolling | WPF приложение
DataGrid
Пример "DataGrid делаем bind данных", кнопка и обработчик нажатия в DataGrid, выравнивание текста в DataGrid, scrolling | WPF приложение
Как сделать scrolling для DataGrid ? | C# WPF приложение
Scrolling для DataGrid (чтобы скролинг работал когда мы крутим колесо мышки и мышка находится вне scroll bar) | C# WPF приложение
Как выделить row цветом при нажатии на row мышкой (change background for selected row) в DataGrid ? | C# WPF приложение
Как row DataGrid выделить цветом (сделать background) ? | C# WPF приложение
Пример "DataGrid делаем сортировку колонки по своему алгоритму (Custom Sort)" | WPF приложение
DataGrid внутри DataGrid
Пример портфолио сотрудников с описанием задач: "DataGrid внутри DataGrid используя RowDetailsTemplate" | WPF приложение
 
ListView
Пример "В ListView расширяем колонку при добавлении данных (auto column width)" | WPF приложение
Пример "В ListView используем ItemTemplate DataTemplate" | WPF приложение
 
ScrollViewer
В Grid добавляем vertical scrolling | WPF приложение
Как сделать scrolling для DataGrid ? | C# WPF приложение
Scrolling для DataGrid (чтобы скролинг работал когда мы крутим колесо мышки и мышка находится вне scroll bar) | C# WPF приложение
Пример "Делаем ScrollBar меньше(больше) в ScrollViewer" | C# WPF приложение
Resource файл
Добавляем картинку (jpg, bmp, png) в проект и помечаем как Resource | C# WPF приложение
Image
В элементе Image показываем картинку (jpg, bmp, png) из Resource | C# WPF приложение
Выбираем картинку (jpg, bmp, png) из компьютера и показываем в элементе Image. Сохраняем картинку в базу данных | C# WPF приложение
Пример "В Image элементе делаем Binding для Source" | C# WPF приложение
Пример "Конвертируем текст base64 в картинку Bitmap и показываем в Image элементе" | C# WPF приложение
Пример "Открываем SVG файл и показываем картинку в Image элементе" | C# WPF приложение
 
Canvas
Пример "Создаем Canvas и рисуем картинку" C# WPF
Пример "Рисуем картинку с движением на Canvas" C# WPF
Пример "Рисуем картинку с движением и анимацией sprite на Canvas" C# WPF
 
Line
Рисуем Line (сплошная и штриховая линии) | C# WPF приложение
Пример "Создаем и рисуем линию при нажатии левой клавишей мыши на Grid"| Grid Line | C# WPF приложение
Конвертируем картинку в XAML Path Geometry
Конвертируем SVG в XAML(используя Adobe Illustrator), заполняем Path Data Geometry, показываем линии на экране | C# WPF приложение
Конвертируем SVG в XAML(используя Dias SVG to UWP XAML Converter), заполняем Path Data Geometry, показываем линии на экране | C# WPF приложение
Конвертируем PNG в SVG в XAML | C# WPF приложение
Converter SVG to XAML | WPF C#
Конвертируем XAML в SVG | C# WPF приложение
ViewBox
Пример "ViewBox делаем Binding для Left, Top, Width, Height, ContetnPresenter binding" | C# WPF приложение
Width by percentage
Разделить экран по вертикали (по ширине) на 2 равные части экран (width1 = 50%, width2 = 50%), используем Grid | C# WPF приложение
Разделить экран по вертикали (по ширине) на 2 части (width1 = 70%, width2 = 30%), используем Grid | C# WPF приложение
Пример "Устанавливаем ширину элемента в процентах от ширины родительского элемента" (width in percentage), пишем свой IValueConverter | C# WPF приложение
База данных (Entity Framework)
Entity Framework в приложении WPF. Используем Code First (пишем c# код, а таблицы в базе данных создаются сами)
Создаем свои WPF элементы
Пример "Создаем свой WPF элемент используя Style и новый xaml файл. Новый элемент это: вверху Title, внизу текст в рамке. Используем Binding | C# WPF приложение
Пример "Создаем свой новый WPF элемент со своими свойсвами в новом cs и xaml файлах. В WPF новом элементе: вверху Title, снизу текст и в рамке | C# WPF приложение
WPF приложение с библиотекой Prism (MVVM шаблон проектирования)
Создаем новое WPF приложение с Prism Unity (разделение проекта на папки Services, Views, ViewModels). Патерн MVVM (Model-View-ViewModel) | C#
WPF приложение с Prism Unity. В приложении Tab и разделения на отдельные xaml используя Region.
WPF приложение с Locator (MVVM шаблон проектирования)
Создаем новое WPF приложение с Locator (разделение проекта на папки Views, ViewModels)
Как добавить Dependency Injection, загрузку из appsettings.json в новом WPF приложении ?
Автоматические тесты
Пишем автоматический тест для WPF C# приложения (используем Nuget.Appium и свойство AutomationProperties.AutomationId)
Вопросы на собеседованиях
В чем отличие static resource от dynamic resource ? | WPF C#
Дополнительные темы, вопросы
Открываем окно свойств (properties) для графического элемента в WPF приложении C#
Ошибки
Ошибка "To run this application, you must install .NET. Would you like to download it now?" | Запускаю WPF приложение на C#
Книги
Книги для изучения WPF

  Ваши вопросы присылайте по почте: info@dir.by  
Яндекс.Метрика