C# 在WPF面板上添加和删除用户控件的正确方法

C# 在WPF面板上添加和删除用户控件的正确方法,c#,wpf,C#,Wpf,在面板上添加和删除用户控件的正确方法 我对此有些怀疑: 这样做对(更好)吗 在内存中留下一些浪费,以便在一段时间后运行应用程序 目前,我有一个主窗口,如下所示: <!-- MainWindow.xaml --> <Window x:Class="Empresas.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http:/

在面板上添加和删除用户控件的正确方法

我对此有些怀疑:

  • 这样做对(更好)吗
  • 在内存中留下一些浪费,以便在一段时间后运行应用程序
  • 目前,我有一个主窗口,如下所示:

    <!-- MainWindow.xaml -->
    <Window x:Class="Empresas.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="Empresas" Height="480" Width="640"
            MinHeight="480" MinWidth="640">
        <DockPanel HorizontalAlignment="Stretch" Width="Auto" Margin="0">
    
            <!-- Menu -->
            <Menu x:Name="MainWindowClientesMenu" Width="Auto" Height="25"
                  DockPanel.Dock="Top">
                <MenuItem Header="_Archivo">
                    <MenuItem Header="Agregar _Nueva empresa" x:Name="MainWindowClientesAgregarEmpresa" Click="MainWindowClientesAgregarEmpresa_Click" />
                    <Separator/>
                    <MenuItem Header="Salir"/>
                </MenuItem>
            </Menu>
            <!-- Fin Menu -->
    
            <!-- Barra de Estado -->
            <StatusBar x:Name="MainWindowClientesStatusBar" Width="Auto" Height="25"
                       DockPanel.Dock="Bottom" Background="#ddd" HorizontalAlignment="Stretch">
                <StatusBarItem x:Name="MainWindowClientesCurrentAction" HorizontalContentAlignment="Right"
                               Margin="0 0 5 0"></StatusBarItem>
            </StatusBar>
    
    
            <StackPanel x:Name="MainWindowClientesContenido"></StackPanel>
            <!-- Fin Lista isquierda de Empresas/Clientes -->
    
        </DockPanel>
    </Window>
    
    // MainWindow.xaml.cs
    private void MainWindowClientesAgregarEmpresa_Click(object sender, RoutedEventArgs e)
            {
                MainWindowClientesContenido.Children.Add(new View.NuevaEmpresa(MainWindowClientesContenido));
            }
    
    // NuevaEmpresa.xaml.cs
    public partial class NuevaEmpresa : UserControl
    {
        // ...
        private Panel _parent;    
    
        public NuevaEmpresa(Panel parent)
        {
            InitializeComponent();
            _parent = parent;
            // ...
    
        }
    
        // ...
    
        private void NuevaEmpresaCancelarButton_Click(object sender, RoutedEventArgs e)
        {
            _parent.Children.Clear();
        }
    }
    

    我不明白为什么这可能是错误的。您正在设置它的子对象,然后清除它。我觉得这很正常。也不明白为什么内存会泄漏。一旦父母清除了孩子,就必须处理掉

    // MainWindow.xaml.cs
    private void MainWindowClientesAgregarEmpresa_Click(object sender, RoutedEventArgs e)
            {
                MainWindowClientesContenido.Children.Add(new View.NuevaEmpresa(MainWindowClientesContenido));
            }
    
    // NuevaEmpresa.xaml.cs
    public partial class NuevaEmpresa : UserControl
    {
        // ...
        private Panel _parent;    
    
        public NuevaEmpresa(Panel parent)
        {
            InitializeComponent();
            _parent = parent;
            // ...
    
        }
    
        // ...
    
        private void NuevaEmpresaCancelarButton_Click(object sender, RoutedEventArgs e)
        {
            _parent.Children.Clear();
        }
    }