private static void FixSiblingDimension(object sender, string SiblingName, UpdateLengthHandler Handler, SizeChangedEventHandler EventHandler) { FrameworkElement SenderElement = sender as FrameworkElement; Size AdjustedSize = new Size(SenderElement.ActualWidth, SenderElement.ActualHeight); if ((!double.IsNaN(AdjustedSize.Width) && AdjustedSize.Width > 0) || (!double.IsNaN(AdjustedSize.Height) && AdjustedSize.Height > 0)) { FrameworkElement CurrentElement = SenderElement; while (CurrentElement != null) { Panel AsPanel; FrameworkElement AsFrameworkElement; if ((AsPanel = CurrentElement as Panel) != null) { FrameworkElement AsSibling; if ((AsSibling = AsPanel.FindName(SiblingName) as FrameworkElement) != null) { if (double.IsNaN(AsSibling.Height)) { SenderElement.SizeChanged -= EventHandler; Handler(AsSibling, AdjustedSize); } } break; } else if ((AsFrameworkElement = CurrentElement.Parent as FrameworkElement) != null) { CurrentElement = AsFrameworkElement; } else { break; } } } }
private static void FixSiblingDimension(object sender, string siblingName, UpdateLengthHandler handler, SizeChangedEventHandler eventHandler) { FrameworkElement SenderElement = (FrameworkElement)sender; Size AdjustedSize = new Size(SenderElement.ActualWidth, SenderElement.ActualHeight); if ((!double.IsNaN(AdjustedSize.Width) && AdjustedSize.Width > 0) || (!double.IsNaN(AdjustedSize.Height) && AdjustedSize.Height > 0)) { FrameworkElement CurrentElement = SenderElement; while (true) { if (CurrentElement is Panel AsPanel) { if (AsPanel.FindName(siblingName) is FrameworkElement AsSibling) { if (double.IsNaN(AsSibling.Height)) { SenderElement.SizeChanged -= eventHandler; handler(AsSibling, AdjustedSize); } } break; } else if (CurrentElement.Parent is FrameworkElement AsFrameworkElement) { CurrentElement = AsFrameworkElement; } else { break; } } } }