• WPF中如何在MVVM模式下关闭窗口


    完全来源于十月的寒流,感谢大佬讲解

    使用Behaviors

    <Window x:Class="Test_03.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
            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:local="clr-namespace:Test_03"
            WindowStyle="None"
            mc:Ignorable="d"
            Height="450" Width="800">
        <Window.DataContext>
            <local:MainWindowViewModel></local:MainWindowViewModel>
        </Window.DataContext>
        <Grid>
            <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="50" Text="{Binding Title}"></TextBlock>
            <StackPanel Margin="5.0" HorizontalAlignment="Right" VerticalAlignment="Top"
                        Orientation="Horizontal">
                <StackPanel.Resources></StackPanel.Resources>
                <Button Margin="5.0" Content="_">
                    <b:Interaction.Triggers>
                        <b:EventTrigger EventName="Click">
                            <b:ChangePropertyAction TargetObject="{Binding RelativeSource={RelativeSource AncestorType=Window}}" PropertyName="WindowState" Value="{x:Static WindowState.Minimized}"></b:ChangePropertyAction>
                        </b:EventTrigger>
                    </b:Interaction.Triggers>
                </Button>
                <Button Margin="5.0" Content="[ ]">
                    <b:Interaction.Triggers>
                        <b:EventTrigger EventName="Click">
                            <b:ChangePropertyAction TargetObject="{Binding RelativeSource={RelativeSource AncestorType=Window}}" PropertyName="WindowState" Value="{x:Static WindowState.Maximized}"></b:ChangePropertyAction>
                        </b:EventTrigger>
                    </b:Interaction.Triggers>
                </Button>
                <Button Margin="5.0" Content="X" Background="Red">
                    <b:Interaction.Triggers>
                        <b:EventTrigger EventName="Click">
                            <b:CallMethodAction TargetObject="{Binding RelativeSource={RelativeSource AncestorType=Window}}" MethodName="Close"></b:CallMethodAction>
                        </b:EventTrigger>
                    </b:Interaction.Triggers>
                </Button>
            </StackPanel>
        </Grid>
    </Window>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    讲解

    1. : 是一个开始定义触发器的标记。通常,这个标记包含在一个控件的开始标记和结束标记之间,用于指定将要应用触发器的控件。

    2. : 表示一个事件触发器,告诉XAML在指定的事件发生时执行后续定义的动作。在这里,事件名称为"Click",表示当用户点击与此触发器相关联的UI元素时触发。

    3. : 这是触发器的动作部分。使用了CallMethodAction,这是一种行为,用于调用方法。指定了要调用的方法是窗口(Window)的Close方法。

      • TargetObject="{Binding RelativeSource={RelativeSource AncestorType=Window}}": 这部分指定了目标对象,即将要调用方法的对象。在这里,通过使用RelativeSource,找到了最近的窗口(Window)并将其绑定为目标对象。

      • MethodName="Close": 这部分指定了要调用的方法的名称,即窗口的Close方法。

    因此,整个代码的作用是,当与此触发器相关联的UI元素(可能是一个按钮)被点击时,会调用最近的窗口的Close方法,关闭该窗口。

  • 相关阅读:
    好用的跨平台同步笔记工具,手机和电脑可同步的笔记工具
    自动化测试 —— unittest框架,理论和实操双管齐下
    面向对象的分析与设计(精品课程)第二章作业
    opengl-shader学习笔记:varying变量
    zookeeper+kafka
    用c语言编写计算器
    前端周刊第三十期
    SpringMVC ---- 拦截器
    基于Java实现的图片搜索系统
    日常中msvcr120.dll丢失怎么解决?有效的5个解决方法分享
  • 原文地址:https://blog.csdn.net/zzyzxb/article/details/134477994