diff options
Diffstat (limited to 'Xamarin.Forms.Platform.Tizen/Renderers/MasterDetailPageRenderer.cs')
-rw-r--r-- | Xamarin.Forms.Platform.Tizen/Renderers/MasterDetailPageRenderer.cs | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/Xamarin.Forms.Platform.Tizen/Renderers/MasterDetailPageRenderer.cs b/Xamarin.Forms.Platform.Tizen/Renderers/MasterDetailPageRenderer.cs new file mode 100644 index 00000000..9da812e9 --- /dev/null +++ b/Xamarin.Forms.Platform.Tizen/Renderers/MasterDetailPageRenderer.cs @@ -0,0 +1,96 @@ +using ElmSharp; + +namespace Xamarin.Forms.Platform.Tizen +{ + public class MasterDetailPageRenderer : VisualElementRenderer<MasterDetailPage> + { + Native.MasterDetailPage _mdpage; + + /// <summary> + /// Default constructor. + /// </summary> + public MasterDetailPageRenderer() + { + RegisterPropertyHandler("Master", UpdateMasterPage); + RegisterPropertyHandler("Detail", UpdateDetailPage); + RegisterPropertyHandler(MasterDetailPage.IsPresentedProperty, + UpdateIsPresented); + RegisterPropertyHandler(MasterDetailPage.MasterBehaviorProperty, + UpdateMasterBehavior); + RegisterPropertyHandler(MasterDetailPage.IsGestureEnabledProperty, + UpdateIsGestureEnabled); + } + + protected override void OnElementChanged(ElementChangedEventArgs<MasterDetailPage> e) + { + if (_mdpage == null) + { + _mdpage = new Native.MasterDetailPage(Forms.Context.MainWindow) + { + Master = GetNativePage(e.NewElement.Master), + Detail = GetNativePage(e.NewElement.Detail), + IsPresented = e.NewElement.IsPresented, + }; + + _mdpage.IsPresentedChanged += (sender, ev) => + { + Element.IsPresented = _mdpage.IsPresented; + }; + } + + if (e.OldElement != null) + { + (e.OldElement as IMasterDetailPageController).BackButtonPressed -= BackButtonPressedHandler; + } + + if (e.NewElement != null) + { + (e.NewElement as IMasterDetailPageController).BackButtonPressed += BackButtonPressedHandler; + } + + UpdateMasterBehavior(); + SetNativeControl(_mdpage); + + base.OnElementChanged(e); + } + + void BackButtonPressedHandler(object sender, BackButtonPressedEventArgs e) + { + if ((Element != null) && !Element.IsPresented) + { + Element.IsPresented = true; + e.Handled = true; + } + } + + EvasObject GetNativePage(Page page) + { + var pageRenderer = Platform.GetOrCreateRenderer(page); + return pageRenderer.NativeView; + } + + void UpdateMasterBehavior() { + _mdpage.MasterBehavior = Element.MasterBehavior; + } + + void UpdateMasterPage() + { + _mdpage.Master = GetNativePage(Element.Master); + } + + void UpdateDetailPage() + { + _mdpage.Detail = GetNativePage(Element.Detail); + } + + void UpdateIsPresented() + { + _mdpage.IsPresented = Element.IsPresented; + } + + void UpdateIsGestureEnabled() + { + _mdpage.IsGestureEnabled = Element.IsGestureEnabled; + } + } +} |