diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/GitHub2642.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/GitHub2642.cs new file mode 100644 index 00000000000..aabb1aa6476 --- /dev/null +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/GitHub2642.cs @@ -0,0 +1,51 @@ +using Xamarin.Forms.CustomAttributes; +using Xamarin.Forms.Internals; + +namespace Xamarin.Forms.Controls.Issues +{ + [Preserve(AllMembers = true)] + [Issue(IssueTracker.Github, 2642, "ControlTemplate resizing issue", PlatformAffected.WPF)] + public class GitHub2642 : TestContentPage + { + public class PresenterWrapper : ContentView + { + public PresenterWrapper() + { + Content = new ContentPresenter(); + } + } + + protected override void Init() + { + this.ControlTemplate = new ControlTemplate(typeof(PresenterWrapper)); + + var grid = new Grid() + { + RowDefinitions = new RowDefinitionCollection + { + new RowDefinition { Height = new GridLength(0, GridUnitType.Auto) }, + new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }, + } + }; + + grid.AddChild(new Label() + { + Text = "Header", + LineBreakMode = LineBreakMode.WordWrap, + FontSize = 24 + + }, 0, 0); + + grid.AddChild(new Label() + { + Text = "Lorem ipsum dolor sit amet, sed at etiam graecis. Amet dicta utroque in ius, error vituperatoribus vel ex. " + + "Cu duo veri aperiam honestatis. Quo sint movet ullamcorper cu, vero vidisse argumentum ne nec, in munere eirmod eum. " + + "Persius similique reformidans ex mei, cu quo quot nihil mediocrem.", + LineBreakMode = LineBreakMode.WordWrap + + }, 0, 1); + + Content = grid; + } + } +} \ No newline at end of file diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems index 3eb4f8f3b81..dcb57e3d678 100644 --- a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems @@ -263,6 +263,7 @@ + diff --git a/Xamarin.Forms.Platform.WPF/FormsContentLoader.cs b/Xamarin.Forms.Platform.WPF/FormsContentLoader.cs index 08a492aac1c..b8158261402 100644 --- a/Xamarin.Forms.Platform.WPF/FormsContentLoader.cs +++ b/Xamarin.Forms.Platform.WPF/FormsContentLoader.cs @@ -50,11 +50,25 @@ private object CreateOrResizeContent(FrameworkElement parent, VisualElement visu //if (Debugger.IsAttached) // Console.WriteLine("Page type : " + visualElement.GetType() + " (" + (visualElement as Page).Title + ") -- Parent type : " + visualElement.Parent.GetType() + " -- " + parent.ActualHeight + "H*" + parent.ActualWidth + "W"); - visualElement.Layout(new Rectangle(0, 0, parent.ActualWidth, parent.ActualHeight)); + var actualRect = new Rectangle(0, 0, parent.ActualWidth, parent.ActualHeight); + visualElement.Layout(actualRect); + + // ControlTemplate adds an additional layer through which to send sizing changes. + var contentPage = visualElement as ContentPage; + if (contentPage?.ControlTemplate != null) + { + contentPage.Content?.Layout(actualRect); + } + else + { + var contentView = visualElement as ContentView; + if (contentView?.ControlTemplate != null) + contentView.Content?.Layout(actualRect); + } IPageController pageController = visualElement.RealParent as IPageController; if (pageController != null) - pageController.ContainerArea = new Rectangle(0, 0, parent.ActualWidth, parent.ActualHeight); + pageController.ContainerArea = actualRect; return renderer.GetNativeElement(); }