Files
ShrlAlgoToolkit/ShrlAlgo.Toolkit.Mvvm/Behaviors/CloseByPropertyBehavior.cs

47 lines
1.1 KiB
C#

using System.Windows;
using Microsoft.Xaml.Behaviors;
namespace ShrlAlgo.Toolkit.Mvvm.Behaviors;
/// <summary>
/// 通过设置属性值,关闭窗口
/// </summary>
/// <example>
/// <c><i:Interaction.Behaviors>
/// <behavior:CloseByPropertyBehavior CloseTrigger = "{Binding CloseTrigger}" />
/// </ i:Interaction.Behaviors>
/// </c>
/// </example>
public class CloseByPropertyBehavior : Behavior<Window>
{
public static readonly DependencyProperty CloseTriggerProperty = DependencyProperty.Register(
nameof(CloseTrigger),
typeof(bool),
typeof(CloseByPropertyBehavior),
new PropertyMetadata(false, OnCloseTriggerChanged)
);
public bool CloseTrigger
{
get => (bool)GetValue(CloseTriggerProperty);
set => SetValue(CloseTriggerProperty, value);
}
private static void OnCloseTriggerChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (d is CloseByPropertyBehavior behavior)
{
behavior.OnCloseTriggerChanged();
}
}
private void OnCloseTriggerChanged()
{
// when closetrigger is true, close the window
if (CloseTrigger)
{
AssociatedObject.Close();
}
}
}