diff options
author | Jason Smith <jason.smith@xamarin.com> | 2016-03-22 13:02:25 -0700 |
---|---|---|
committer | Jason Smith <jason.smith@xamarin.com> | 2016-03-22 16:13:41 -0700 |
commit | 17fdde66d94155fc62a034fa6658995bef6fd6e5 (patch) | |
tree | b5e5073a2a7b15cdbe826faa5c763e270a505729 /Xamarin.Forms.Platform.WP8/NativeViewWrapperRenderer.cs | |
download | xamarin-forms-17fdde66d94155fc62a034fa6658995bef6fd6e5.tar.gz xamarin-forms-17fdde66d94155fc62a034fa6658995bef6fd6e5.tar.bz2 xamarin-forms-17fdde66d94155fc62a034fa6658995bef6fd6e5.zip |
Initial import
Diffstat (limited to 'Xamarin.Forms.Platform.WP8/NativeViewWrapperRenderer.cs')
-rw-r--r-- | Xamarin.Forms.Platform.WP8/NativeViewWrapperRenderer.cs | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/Xamarin.Forms.Platform.WP8/NativeViewWrapperRenderer.cs b/Xamarin.Forms.Platform.WP8/NativeViewWrapperRenderer.cs new file mode 100644 index 00000000..e28dec94 --- /dev/null +++ b/Xamarin.Forms.Platform.WP8/NativeViewWrapperRenderer.cs @@ -0,0 +1,62 @@ +using System.Windows; + +namespace Xamarin.Forms.Platform.WinPhone +{ + public class NativeViewWrapperRenderer : ViewRenderer<NativeViewWrapper, FrameworkElement> + { + public override SizeRequest GetDesiredSize(double widthConstraint, double heightConstraint) + { + if (Element?.GetDesiredSizeDelegate == null) + return base.GetDesiredSize(widthConstraint, heightConstraint); + + // The user has specified a different implementation of GetDesiredSize + SizeRequest? result = Element.GetDesiredSizeDelegate(this, widthConstraint, heightConstraint); + + // If the delegate returns a SizeRequest, we use it; + // if it returns null, fall back to the default implementation + return result ?? base.GetDesiredSize(widthConstraint, heightConstraint); + } + + protected override System.Windows.Size ArrangeOverride(System.Windows.Size finalSize) + { + if (Element?.ArrangeOverrideDelegate == null) + return base.ArrangeOverride(finalSize); + + // The user has specified a different implementation of ArrangeOverride + System.Windows.Size? result = Element.ArrangeOverrideDelegate(this, finalSize); + + // If the delegate returns a Size, we use it; + // if it returns null, fall back to the default implementation + return result ?? base.ArrangeOverride(finalSize); + } + + protected System.Windows.Size MeasureOverride() + { + return MeasureOverride(new System.Windows.Size()); + } + + protected override System.Windows.Size MeasureOverride(System.Windows.Size availableSize) + { + if (Element?.MeasureOverrideDelegate == null) + return base.MeasureOverride(availableSize); + + // The user has specified a different implementation of MeasureOverride + System.Windows.Size? result = Element.MeasureOverrideDelegate(this, availableSize); + + // If the delegate returns a Size, we use it; + // if it returns null, fall back to the default implementation + return result ?? base.MeasureOverride(availableSize); + } + + protected override void OnElementChanged(ElementChangedEventArgs<NativeViewWrapper> e) + { + base.OnElementChanged(e); + + if (e.OldElement == null) + { + SetNativeControl(Element.NativeElement); + Control.LayoutUpdated += (sender, args) => { Element?.InvalidateMeasure(InvalidationTrigger.MeasureChanged); }; + } + } + } +}
\ No newline at end of file |