WPF:从父容器中删除"您自己"

Den*_*gan 6 c# wpf

我的用户控件中有一个按钮,用于从其父容器中删除用户控件.这就是我今天编写的方式.

private void RemoveRoleButton_Click(object sender, RoutedEventArgs e)
{
    if (ConfirmRoleRemoval())
    {
        Panel parentPanel = (Panel)this.Parent;
        parentPanel.Children.Remove(this);
    }
}

private bool ConfirmRoleRemoval()
{
    return MessageBox.Show("Are you sure [...]
}
Run Code Online (Sandbox Code Playgroud)

在WPF中这样做是否正常?

Hei*_*nzi 6

是的,它看起来很好.正如Mike Hillberg 在他的博客中写道:

元素实际上并没有选择其逻辑父元素; 相反,父母"领养"孩子.

因此,通过父对象模型完成"移除"子进程是有意义的.

作为旁注:当父级不是Panel(而不是等待)时,您可能想要考虑抛出"好"异常(甚至禁用按钮InvalidCastException).