【发布时间】:2021-07-03 03:39:38
【问题描述】:
所以我对整个 C#/WPF 事物还是陌生的,并且想知道如何制作一个按钮,单击该按钮将关闭应用程序。 我尝试了许多来自谷歌搜索的建议,例如:
- Close Window from ViewModel
- WPF Close window with MVVM from ViewModel class
- https://web.csulb.edu/~pnguyen/cecs475/pdf/closingwindowmvvm.pdf
- https://medium.com/@franklyndejesusmejia/close-a-window-from-viewmodel-using-wpf-and-mvvm-pattern-277ec7ef1805
- https://social.msdn.microsoft.com/Forums/vstudio/en-US/17aabea0-4aca-478f-9205-fcd56080b22a/how-to-close-a-window-by-clicking-the-button-using-mvvm?forum=wpf
- https://www.youtube.com/watch?v=U7Qclpe2joo&ab_channel=BrianLagunas
这些似乎都不能正确地帮助我。下面我提供了我目前拥有的代码,这些代码是我按照 ViewModel 导航教程制作的。如果需要更多代码,请告诉我。
文件: File List
MainMenuViewModel:
using Creator.Commands;
using Creator.Stores;
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Input;
namespace Creator.ViewModels
{
class MainMenuViewModel : ViewModelBase
{
public ICommand NavigateItemCreateMenuCommand { get; }
public MainMenuViewModel(NavigationStore navigationStore)
{
NavigateItemCreateMenuCommand = new NavigateCommand<ItemCreateMenuViewModel>(navigationStore, () => new ItemCreateMenuViewModel(navigationStore));
}
}
}
MainMenuView:退出按钮必须关闭应用程序
<UserControl x:Class="Creator.Views.MainMenuView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Creator.Views"
mc:Ignorable="d"
d:DesignHeight="720" d:DesignWidth="1280">
<Grid Background="White">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition/>
<RowDefinition Height="50"/>
</Grid.RowDefinitions>
<DockPanel Background="LightBlue" Grid.Row="1" Grid.Column="1" >
<StackPanel>
<Label Content="Main Menu" HorizontalAlignment="Center" VerticalAlignment="Stretch" FontWeight="Bold" FontFamily="Century Gothic" FontSize="24"/>
<Button Content="Create Item" FontWeight="Bold" FontFamily="Century Gothic" FontSize="18" Margin="20,0,20,5" Padding="0,5,0,5" Command="{Binding NavigateItemCreateMenuCommand}"/>
<Button Content="Quit" FontWeight="Bold" FontFamily="Century Gothic" FontSize="18" Margin="20,0,20,5" Padding="0,5,0,5" VerticalAlignment="Bottom"/>
</StackPanel>
</DockPanel>
</Grid>
</UserControl>
MainWindow.xaml.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace Creator
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
}
TL;DR: 我需要在 MainMenuViewModel/MainMenuView 上设置 Quit 按钮来关闭应用程序。
【问题讨论】:
-
不太清楚你想要什么。按钮关闭应用程序或只是一个窗口。你写
MainMenuView,但不是Window,而是UserControl。如果是应用程序,则只需使用命令扩展您的 VM,您可以在其中调用Application.Current.Shutdown();。 -
@Rekshino 是的对不起,我的意思是应用程序,认为窗口和应用程序关闭是相同的。会更新。
-
这里提供的解决方案是可行的方法:stackoverflow.com/a/16182065/3873053
-
这能回答你的问题吗? Close Window from ViewModel