【发布时间】:2018-08-18 14:56:09
【问题描述】:
我在堆栈面板中添加了一个用户控件,并且该用户控件包含一个按钮。我试图在单击它的子按钮时删除该 UserControl。但它不起作用!
StackPanel
<StackPanel Name="StackPanelContainer" Grid.Row="3"> </StackPanel>
在 StackPanel 中添加控件
private void NewProducModule(object sender, RoutedEventArgs e)
{
UserControl productModules = new AddProductModule();
productModules.Name = "Product" + StackPanelContainer.Children.Count;
StackPanelContainer.Children.Add(productModules);
}
UserControl的子按钮点击方式
private void DeleteSelfProduct(object sender, RoutedEventArgs e)
{
FrameworkElement parent=(FrameworkElement)((Button)sender).Parent;
NewInvoiceControl newInvoiceControl = new NewInvoiceControl();
newInvoiceControl.StackPanelContainer.Children.Remove(parent);
}
【问题讨论】:
-
您正在创建一个
new NewInvoiceControl()。那肯定不是你想要操作的那个。无论如何,您的方法都被打破了。应该有一个视图模型,其中删除了数据项,然后删除了可视化它的 UI 元素。 -
NewInvoiceControl 是包含名为“StackPanelContainer”的 StackPanel 的主容器,然后我在 StackPanelContainer 中添加另一个名为“AddProductModule”的控件,并且此 AddProductModule 控件包含应该删除它的父级的按钮,它是动态创建的!
-
但是如果你创建一个新的,它不是包含你的用户控件的那个。您必须访问
parent的父级才能获取要删除子级的 StackPanel。 -
不清楚为什么您需要访问 NewInvoiceControl。
((Panel)parent.Parent).Children.Remove(parent)应该可以工作。否则,请在代码中的某处保留对 NewInvoiceControl 的引用,即通过分配x:Name。 -
@RaoHammasHussain 在删除之前将控件的可见性设置为折叠,我认为这将有助于剩余空间。