Seria pytań uczestników, które pojawiły się podczas szkolenia Programowanie w WPF MVVM realizowanego w dniach 10-12.03.2021 r..
Można skorzystać z rozwiązania z frameworka lub samodzielnie zaimplementować klasę, która wywoła funkcje WinAPI za pomocą interop.
W tym celu można utworzyć Behavior:
public class CloseWindowBehavior : Behavior
{
protected override void OnAttached()
{
Window window = this.AssociatedObject;
window.Closing += Window_Closing;
}
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
if (!messageBox.Show"(Are you sure?", "Close Behavior"))
{
e.Cancel = true;
}
}
}
a następnie umieścić go w głównym widoku aplikacji:
<Window x:Class="Vavatech.Shop.WpfClient.Views.ShellView"
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:sys="clr-namespace:System;assembly=mscorlib"
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
xmlns:b="clr-namespace:Vavatech.Shop.WpfClient.Behaviors"
mc:Ignorable="d"
Title="ShellView" Height="450" Width="800">
<i:Interaction.Behaviors>
<b:CloseWindowBehavior />
</i:Interaction.Behaviors>
W WPF kontrolka nie można dziedziczyć po wielu stylach jak chociażby w CSS.
Ale można stworzyć własny Attached Property
lub własny Markup Extension do realizacji tego celu.