// ----------------------------------------------------------------------- // // Copyright 2014 MIT Licence. See licence.md for more information. // // ----------------------------------------------------------------------- namespace Perspex.Controls { using System; using System.Collections.Generic; using System.Linq; public abstract class ContentControl : TemplatedControl { public static readonly PerspexProperty ContentProperty = PerspexProperty.Register("Content"); public ContentControl() { this.GetObservable(ContentProperty).Subscribe(x => { Visual visual = x as Visual; Control control = x as Control; if (control != null) { control.VisualParent = this; control.SetValue(ParentPropertyRW, this); } }); } public object Content { get { return this.GetValue(ContentProperty); } set { this.SetValue(ContentProperty, value); } } protected override Size ArrangeContent(Size finalSize) { Control child = this.VisualChildren.SingleOrDefault() as Control; if (child != null) { child.Arrange(new Rect(finalSize)); return child.Bounds.Size; } else { return new Size(); } } protected override Size MeasureContent(Size availableSize) { Control child = this.VisualChildren.SingleOrDefault() as Control; if (child != null) { child.Measure(availableSize); return child.DesiredSize.Value; } else { return new Size(); } } } }