diff options
Diffstat (limited to 'Xamarin.Forms.Platform.WinRT/FrameRenderer.cs')
-rw-r--r-- | Xamarin.Forms.Platform.WinRT/FrameRenderer.cs | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/Xamarin.Forms.Platform.WinRT/FrameRenderer.cs b/Xamarin.Forms.Platform.WinRT/FrameRenderer.cs new file mode 100644 index 00000000..7dcac435 --- /dev/null +++ b/Xamarin.Forms.Platform.WinRT/FrameRenderer.cs @@ -0,0 +1,71 @@ +using System.ComponentModel; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; + +#if WINDOWS_UWP + +namespace Xamarin.Forms.Platform.UWP +#else + +namespace Xamarin.Forms.Platform.WinRT +#endif +{ + public class FrameRenderer : ViewRenderer<Frame, Border> + { + public FrameRenderer() + { + AutoPackage = false; + } + + protected override void OnElementChanged(ElementChangedEventArgs<Frame> e) + { + base.OnElementChanged(e); + + if (e.NewElement != null) + { + if (Control == null) + SetNativeControl(new Border()); + + PackChild(); + UpdateBorder(); + } + } + + protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) + { + base.OnElementPropertyChanged(sender, e); + + if (e.PropertyName == "Content") + { + PackChild(); + } + else if (e.PropertyName == Frame.OutlineColorProperty.PropertyName || e.PropertyName == Frame.HasShadowProperty.PropertyName) + { + UpdateBorder(); + } + } + + void PackChild() + { + if (Element.Content == null) + return; + + IVisualElementRenderer renderer = Element.Content.GetOrCreateRenderer(); + Control.Child = renderer.ContainerElement; + } + + void UpdateBorder() + { + Control.CornerRadius = new CornerRadius(5); + if (Element.OutlineColor != Color.Default) + { + Control.BorderBrush = Element.OutlineColor.ToBrush(); + Control.BorderThickness = new Windows.UI.Xaml.Thickness(1); + } + else + { + Control.BorderBrush = new Color(0, 0, 0, 0).ToBrush(); + } + } + } +}
\ No newline at end of file |