diff options
Diffstat (limited to 'Xamarin.Forms.Platform.WinRT')
-rw-r--r-- | Xamarin.Forms.Platform.WinRT/LabelRenderer.cs | 2 | ||||
-rw-r--r-- | Xamarin.Forms.Platform.WinRT/ViewToRendererConverter.cs | 31 |
2 files changed, 22 insertions, 11 deletions
diff --git a/Xamarin.Forms.Platform.WinRT/LabelRenderer.cs b/Xamarin.Forms.Platform.WinRT/LabelRenderer.cs index cb33cde9..1f2f861d 100644 --- a/Xamarin.Forms.Platform.WinRT/LabelRenderer.cs +++ b/Xamarin.Forms.Platform.WinRT/LabelRenderer.cs @@ -165,7 +165,7 @@ namespace Xamarin.Forms.Platform.WinRT textBlock.TextWrapping = TextWrapping.NoWrap; break; case LineBreakMode.TailTruncation: - textBlock.TextTrimming = TextTrimming.WordEllipsis; + textBlock.TextTrimming = TextTrimming.CharacterEllipsis; textBlock.TextWrapping = TextWrapping.NoWrap; break; case LineBreakMode.MiddleTruncation: diff --git a/Xamarin.Forms.Platform.WinRT/ViewToRendererConverter.cs b/Xamarin.Forms.Platform.WinRT/ViewToRendererConverter.cs index 38950522..3d5906dc 100644 --- a/Xamarin.Forms.Platform.WinRT/ViewToRendererConverter.cs +++ b/Xamarin.Forms.Platform.WinRT/ViewToRendererConverter.cs @@ -2,6 +2,7 @@ using Windows.Foundation; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; +using Xamarin.Forms.Internals; #if WINDOWS_UWP @@ -41,6 +42,8 @@ namespace Xamarin.Forms.Platform.WinRT { readonly View _view; + FrameworkElement FrameworkElement => Content as FrameworkElement; + public WrapperControl(View view) { _view = view; @@ -54,9 +57,17 @@ namespace Xamarin.Forms.Platform.WinRT Content = renderer.ContainerElement; // make sure we re-measure once the template is applied - FrameworkElement frameworkElement = renderer.ContainerElement; - if (frameworkElement != null) - frameworkElement.Loaded += (sender, args) => InvalidateMeasure(); + if (FrameworkElement != null) + { + FrameworkElement.Loaded += (sender, args) => + { + // If the view is a layout (stacklayout, grid, etc) we need to trigger a layout pass + // with all the controls in a consistent native state (i.e., loaded) so they'll actually + // have Bounds set + (_view as Layout)?.ForceLayout(); + InvalidateMeasure(); + }; + } } protected override Windows.Foundation.Size ArrangeOverride(Windows.Foundation.Size finalSize) @@ -65,18 +76,15 @@ namespace Xamarin.Forms.Platform.WinRT Layout.LayoutChildIntoBoundingRegion(_view, new Rectangle(0, 0, finalSize.Width, finalSize.Height)); _view.IsInNativeLayout = false; - var content = Content as FrameworkElement; - content.Arrange(new Rect(_view.X, _view.Y, _view.Width, _view.Height)); + FrameworkElement?.Arrange(new Rect(_view.X, _view.Y, _view.Width, _view.Height)); return finalSize; } protected override Windows.Foundation.Size MeasureOverride(Windows.Foundation.Size availableSize) { - var content = Content as FrameworkElement; - content?.Measure(availableSize); Size request = _view.Measure(availableSize.Width, availableSize.Height, MeasureFlags.IncludeMargins).Request; - - var result = new Windows.Foundation.Size(); + + Windows.Foundation.Size result; if (_view.HorizontalOptions.Alignment == LayoutAlignment.Fill && !double.IsInfinity(availableSize.Width) && availableSize.Width != 0) { result = new Windows.Foundation.Size(availableSize.Width, request.Height); @@ -86,7 +94,10 @@ namespace Xamarin.Forms.Platform.WinRT result = new Windows.Foundation.Size(request.Width, request.Height); } - _view.Layout(new Rectangle(0, 0, result.Width, result.Width)); + _view.Layout(new Rectangle(0, 0, result.Width, result.Height)); + + FrameworkElement?.Measure(availableSize); + return result; } |