diff options
Diffstat (limited to 'Xamarin.Forms.Platform.WP8/FrameRenderer.cs')
-rw-r--r-- | Xamarin.Forms.Platform.WP8/FrameRenderer.cs | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/Xamarin.Forms.Platform.WP8/FrameRenderer.cs b/Xamarin.Forms.Platform.WP8/FrameRenderer.cs new file mode 100644 index 00000000..00472161 --- /dev/null +++ b/Xamarin.Forms.Platform.WP8/FrameRenderer.cs @@ -0,0 +1,57 @@ +using System.ComponentModel; +using System.Windows; +using System.Windows.Controls; + +namespace Xamarin.Forms.Platform.WinPhone +{ + public class FrameRenderer : ViewRenderer<Frame, Border> + { + public FrameRenderer() + { + AutoPackage = false; + } + + protected override void OnElementChanged(ElementChangedEventArgs<Frame> e) + { + base.OnElementChanged(e); + + 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; + + Platform.SetRenderer(Element.Content, Platform.CreateRenderer(Element.Content)); + + UIElement element = Platform.GetRenderer(Element.Content).ContainerElement; + Control.Child = element; + } + + void UpdateBorder() + { + Control.CornerRadius = new CornerRadius(5); + if (Element.OutlineColor != Color.Default) + { + Control.BorderBrush = Element.OutlineColor.ToBrush(); + Control.BorderThickness = new System.Windows.Thickness(1); + } + else + Control.BorderBrush = new Color(0, 0, 0, 0).ToBrush(); + } + } +}
\ No newline at end of file |