dir.by  
  Search  
Programming, development, testing
WPF. Windows Presentation Foundation (отдельное приложение exe файл)
WPF приложение с библиотекой Prism (MVVM шаблон проектирования)
WPF приложение с Prism Unity. В приложении Tab и разделения на отдельные xaml используя Region.
  Looked at 4834 times    
 WPF приложение с Prism Unity. Приложение разделено на Tab (вкладки), каждая вкладка в отдельном xaml используя Region. 
last updated: 17 May 2022
Скачать пример
WpfPrismRegion ...
размер: 35 kb
Example result
Исходники программы
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"
 
← Previous topic
Создаем новое WPF приложение с Prism Unity (разделение проекта на папки Services, Views, ViewModels). Патерн MVVM (Model-View-ViewModel) | C#
 
Next topic →
Создаем новое WPF приложение с Locator (разделение проекта на папки Views, ViewModels)
 
Your feedback ... Comments ...
   
Your Name
Your comment (www links can only be added by a logged-in user)

  Объявления  
  Объявления  
 
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 приложение
Example "I make animations for icons, library fontawesome5" | C# WPF application
 
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 приложение
Example "Do ScrollBar less(more) in ScrollViewer" | C# WPF application
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 элементы
Example "Create your own WPF element using Style and a new xaml file. The new element is: at the top Title, at the bottom the text in the frame. Using Binding | C# WPF application
Пример "Создаем свой новый 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#
Ошибки
Error "To run this application, you must install .NET. Would you like to download it now?" | I run WPF the application on C#
Книги
Книги для изучения WPF

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