我有wpf应用程序有Mainform,我正在动态添加自定义用户控件;自定义用户控件hase关闭按钮应该处理usercontrol.I我无法从自己处理相同的usercontrol(我怎么能在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.
}
}
}
答案 0 :(得分:2)
一般情况下,在WPF中,UserControl
的不需要被处理......他们不实施{ {3}}。他们不包含任何需要处置的服务或其他成员。 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();
答案 1 :(得分:0)
当你点击关闭按钮时,你的UserControl应该实现一个触发事件。然后,您的表格应通过处置控件对此事件作出反应。您无法从内部处置控件。