private void RemoveFromParent() { var cctl = _parent as IContentControl; if (cctl != null && cctl.Content != this) { cctl.Content = null; } else { var pctl = _parent as IChildrenControl; if (pctl != null) { pctl.Children.Remove(this); } else { throw new Exception("Unknown IParentControl"); } } try { DetachedFromParent?.Invoke(this, EventArgs.Empty); } catch { /* */ } }
private void OnDetach(object sender, ChildRemovedEventArgs args) { var ctrl = args?.Child; if (sender != _parent || ctrl != this) { return; } var cctl = sender as IContentControl; if (cctl != null && cctl.Content != this) { cctl.ContentDetached -= OnDetach; } else { var pctl = sender as IChildrenControl; if (pctl != null) { pctl.ChildRemoved -= OnDetach; } else { throw new Exception("Unknown IParentControl"); } } try { DetachedFromParent?.Invoke(this, EventArgs.Empty); } catch { /* */ } }