Programowanie w WPF MVVM (marzec 2021)

Seria pytań uczestników, które pojawiły się podczas szkolenia Programowanie w WPF MVVM realizowanego w dniach 10-12.03.2021 r..


W jaki sposób wyświetlić ikonę w trayu?

Można skorzystać z rozwiązania z frameworka lub samodzielnie zaimplementować klasę, która wywoła funkcje WinAPI za pomocą interop.

W jaki sposób wyświetlić pytanie czy zamknąć aplikację WPF zgodnie z MVVM?

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 jaki sposób dziedziczyć po wielu stylach w WPF tak jak w CSS?

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.