【问题标题】:Closing Second Window that is created in MainWindow WPF关闭在 MainWindow WPF 中创建的第二个窗口
【发布时间】:2019-12-01 06:47:01
【问题描述】:

我正在创建一个地址簿应用程序。我目前有 MainWindow.xaml:

<Window x:Class="AddressBook.MainWindow"
    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:local="clr-namespace:AddressBook"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800">
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="20"/>
        <ColumnDefinition Width="auto"/>
        <ColumnDefinition Width="auto"/>
        <ColumnDefinition Width="auto"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="20"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="20"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="auto"/>
        <RowDefinition Height="auto"/>
        <RowDefinition Height="auto"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="20"/>
    </Grid.RowDefinitions>

    <Button Width="100" Height="50" Grid.Column="2" Grid.Row="2" Margin="0 0 0 50" Click="Button_Click">New Contact</Button>
    <Button Width="100" Height="50" Grid.Column="2" Grid.Row="3" Margin="0 0 0 50">Edit Contact</Button>
    <Button Width="100" Height="50" Grid.Column="2" Grid.Row="4" Margin="0 0 0 50">Delete Contact</Button>

    <ListView Margin="10" Name="lvContacts" Grid.Column="3" Grid.ColumnSpan="4" Grid.Row="1" Grid.RowSpan="4" >
        <ListView.Resources>
            <Style TargetType="{x:Type GridViewColumnHeader}">
                <Setter Property="HorizontalContentAlignment" Value="Left"/>
            </Style>
        </ListView.Resources>
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Name" Width="120" DisplayMemberBinding="{Binding Name}" ></GridViewColumn>
                <GridViewColumn Header="Age" Width="50" DisplayMemberBinding="{Binding Age}" ></GridViewColumn>
                <GridViewColumn Header="Mail" Width="150" DisplayMemberBinding="{Binding Mail}" ></GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView>
</Grid>

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 AddressBook
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        NewContact newContact;
        public MainWindow()
        {
            InitializeComponent();
            List<Contact> items = new List<Contact>();
            items.Add(new Contact() { Name = "John Doe", Age = 42, Mail = "john@doe-family.com" });
            items.Add(new Contact() { Name = "Jane Doe", Age = 39, Mail = "jane@doe-family.com" });
            items.Add(new Contact() { Name = "Sammy Doe", Age = 7, Mail = "sammy.doe@gmail.com" });
            lvContacts.ItemsSource = items;
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            newContact = new NewContact();
            newContact.Show();
        }        
    }

    public class Contact
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public string Mail { get; set; }
    }
}

当用户单击“新建联系人”按钮时,它会创建一个名为“NewContact.xaml”的第二个窗口

<Window x:Class="AddressBook.NewContact"
    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:local="clr-namespace:AddressBook"
    mc:Ignorable="d"
    Title="NewContact" Height="348.322" Width="516.107">
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="40"/>
        <ColumnDefinition Width="200"/>
        <ColumnDefinition Width="20"/>
        <ColumnDefinition Width="200"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="40"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="20"/>           
        <RowDefinition Height="auto"/>
        <RowDefinition Height="auto"/>
        <RowDefinition Height="auto"/>
        <RowDefinition Height="auto"/>
        <RowDefinition Height="auto"/>
        <RowDefinition Height="auto"/>
        <RowDefinition Height="auto"/>
        <RowDefinition Height="auto"/>
        <RowDefinition Height="auto"/>
        <RowDefinition Height="auto"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="20"/>
    </Grid.RowDefinitions>

    <!--Title Label Column-1 Row-1 -->
    <Label Grid.Column="1" Grid.ColumnSpan="4" Grid.Row="1" HorizontalAlignment="Center" FontSize="24" FontWeight="Black">New Contact</Label>

    <!--First Name-->
    <Label Grid.Column="1" Grid.Row="2">First Name</Label>       
    <TextBox Grid.Column="1" Grid.Row="3" ></TextBox>

    <!--Last Name-->
    <Label Grid.Column="3" Grid.Row="2">Last Name</Label>
    <TextBox Grid.Column="3" Grid.Row="3"></TextBox>

    <!--Address-->
    <Label Grid.Column="1" Grid.Row="4">Address</Label>
    <TextBox Grid.Column="1" Grid.ColumnSpan="3" Grid.Row="5"></TextBox>

    <!--Email-->
    <Label Grid.Column="1" Grid.Row="6">Email</Label>
    <TextBox Grid.Column="1" Grid.ColumnSpan="3" Grid.Row="7"></TextBox>

    <!--Phone Number-->
    <Label Grid.Column="1" Grid.Row="8">Phone Number</Label>
    <TextBox Grid.Column="1" Grid.Row="9"></TextBox>

    <Button x:Name="Submit_Button" Grid.Column="1" Grid.Row="10" Width="75" Height="25" Margin="0 20 0 20">Submit</Button>
    <Button x:Name="Cancel_Button" Grid.Column="3" Grid.Row="10" Width="75" Height="25" Margin="0 20 0 20" Click="Cancel_Button_Click">Cancel</Button>


</Grid>

我希望用户能够在单击 Cancel_Button 时关闭 NewContact 窗口。

我的第一个想法是执行以下操作,但我不知道如何正确实施它,我知道我遗漏了一些东西或不明白这应该如何工作并且需要一些指导。

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.Shapes;

namespace AddressBook
{
    /// <summary>
    /// Interaction logic for NewContact.xaml
    /// </summary>
    public partial class NewContact : Window
    {
        public NewContact()
        {
            InitializeComponent();
        }

        private void Cancel_Button_Click(object sender, RoutedEventArgs e)
        {
            NewContact NewContact = new NewContact();
            NewContact.Close();
        }
    }
}

感谢任何帮助!

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    您可以使用 Window Close 方法来关闭它,该方法手动关闭一个窗口。 因此,在按钮的“Cancel_Button_Click”中,您可以使用“Close();”而不是创建它自己的类的新实例并关闭它。

    【讨论】:

    • 谢谢!我正在输入这个,因为我看到你的评论进来了。我将你的评论标记为答案。
    【解决方案2】:

    想通了,这是一个简单的解决方案。

    private void Cancel_Button_Click(object sender, RoutedEventArgs e)
        {            
            Close();
        }
    

    我想多了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-01
      • 2015-01-23
      • 2015-01-23
      • 2023-03-31
      • 1970-01-01
      相关资源
      最近更新 更多