47 lines
1.1 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|