正在从同一用户控件中处置用户控件

本文关键字:用户 控件 | 更新日期: 2023-09-27 18:19:34

我有一个具有Mainform的wpf应用程序,我正在动态添加一个自定义用户控件;自定义用户控件hase关闭按钮,该按钮应处理用户控件。我无法从自身处理相同的用户控件(在winform应用程序中我怎么能做到这一点)。现在我正在使用自定义事件委托来实现此功能(从主窗口,通过从网格中远程处理控件)。

有人能提出更好的方法吗?

namespace WpfApplication1
{
/// <summary>
/// Interaction logic for ChildControl.xaml
/// </summary>
public partial class ChildControl : UserControl
{
    public delegate void onCloseOfControl();
    public event onCloseOfControl CloseBtnEvent;
    //This control will be added into
    // grid of Mainwindow.
    public ChildControl()
    {
        InitializeComponent();
    }
    //I want to remove this whole control
    private void btnCloseOnChild_Click(object sender, RoutedEventArgs e)
    {
        //this.Dispose();
        //Not Possible In wpf,I could do this in Winforms.
        //Now I am wrting this logic
        if (CloseBtnEvent != null)
            CloseBtnEvent();
        //Now main window will get this event,and I will
        //remove this control from grid.
    }
 }
}

正在从同一用户控件中处置用户控件

通常在WPF中,UserControl不需要。。。它们不实现CCD_ 2接口。它们不包含任何需要处理的服务或其他成员。WPF UserControl与WinForms UserControl几乎没有相似之处,您越早停止将WPF与WinForms进行比较,就越能更好地学习WPF。

移除或替换UserControl的简单操作就足以释放它可能占用的任何资源。我们经常在WPF中使用DataTemplate来让框架为我们显示UserControl

<DataTemplate DataType="{x:Type ViewModels:UsersViewModel}">
    <Views:UsersView />
</DataTemplate>

<ContentControl Content="{Binding ViewModel}" />

在进行此操作时,更换UserControl所需的操作如下:

ViewModel = new UsersViewModel();

您的UserControl应该实现当您按下关闭按钮时触发的事件。然后,您的窗体应该通过处理控件来对此事件作出反应。您无法从控件内部处置控件。