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();
}
}