Всем привет, сегодня мы будем делать кастомные окна 3 способами. 1 способ - WindowChrome Это самый популярный способ, для его реализации нужно просто написать пару строк на XAML, но имеются значительные (для меня) недостатки. Реализация 1: 1) Добавить окну атрибуты: AllowsTransparency="True" WindowStyle="None" Код AllowsTransparency="True" WindowStyle="None" 2) добавить между тегами окна(там, где Grid) конструкцию: <WindowChrome.WindowChrome> <WindowChrome CaptionHeight="30" ResizeBorderThickness="5" /> </WindowChrome.WindowChrome> Код <WindowChrome.WindowChrome> <WindowChrome CaptionHeight="30" ResizeBorderThickness="5" /> </WindowChrome.WindowChrome> CaptionHeight - Высота заголовка, ResizeBorderThickness - толщина краёв окна для растягивания. Недостатки: Когда окно развернуто во весь экран за краями экрана пропадает несколько пикселей (На StackOverFlow написали, что это можно исправить с помощью Margin = 5, но это может по-разному работать на разных версиях Windows. Также это зависит от ширины границы окна, которую можно поменять с помощью AeroTweak.) Больше информации о WindowChrome: https://docs.microsoft.com/ru-ru/dotnet/api/system.windows.shell.windowchrome?view=netframework-4.8 2 способ - MahApps.Metro Это самый простой способ, ведь в нем нам предоставляется уже готовое окно. 1) В консоль NuGet вводим команду: Install-Package MahApps.Metro Код Install-Package MahApps.Metro 2) Добавляем пространство имён в тег окна: xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro" Код xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro" 3) Заменяем тег Window на <Controls:MetroWindow>. 4) Изменяем наследование в файле C#: public partial class MainWindow: MetroWindow { public MainWindow() { InitializeComponent(); } } Код public partial class MainWindow: MetroWindow { public MainWindow() { InitializeComponent(); } } 5) Выбор цветовой схемы: Изменяем тег <Application.Resources> в файле App.xaml на: <Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" /> <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" /> <!-- Light.Blue.xaml - сама цветовая схема, Light можно заменить на Dark, а Blue на любой другой цвет --> <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Themes/Light.Blue.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources> Код <Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" /> <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" /> <!-- Light.Blue.xaml - сама цветовая схема, Light можно заменить на Dark, а Blue на любой другой цвет --> <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Themes/Light.Blue.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources> Из недостатков можно отметить только то, что это окно плохо приспособлено для кастомизации. Оно основано на ControlzEx, который мы рассмотрим далее. Он позволяет включить окну свечение с помощью атрибута GlowBrush="{DynamicResource AccentColorBrush}", где {DynamicResource AccentColorBrush}" можно заменить любым другим цветом. Подробнее на mahapps.com 3 способ - ControlzEx Это, наверное, самый лучший способ, ведь он исправляет исчезающие пиксели WindowChrome и дает возможность сделать окно светящимся. Однако нам снова придется использовать WindowChrome, ведь WindowChromeBehavior не имеет функции перетаскивания заголовка. 1) Делаем, всё как в 1 способе и вводим в консоль NuGet команду: Install-Package ControlzEx -Version 3.0.2.4 Код Install-Package ControlzEx -Version 3.0.2.4 2) Добавляем пространства имён в MainWindow.xaml.cs: using ControlzEx.Behaviors; using Microsoft.Xaml.Behaviors; Код using ControlzEx.Behaviors; using Microsoft.Xaml.Behaviors; 3) Добавляем исправленное поведение в MainWindow.xaml.cs в метод MainWindow: GlowWindowBehavior glow = new GlowWindowBehavior(); glow.GlowBrush = new SolidColorBrush(Colors.Orange); // Тут задаётся цвет glow.ResizeBorderThickness = new Thickness(5); Interaction.GetBehaviors(this).Add(glow); Код GlowWindowBehavior glow = new GlowWindowBehavior(); glow.GlowBrush = new SolidColorBrush(Colors.Orange); // Тут задаётся цвет glow.ResizeBorderThickness = new Thickness(5); Interaction.GetBehaviors(this).Add(glow); Это была моя первая статья, просьба не судить строго!