diff --git a/Ooui.Forms/Exports.cs b/Ooui.Forms/Exports.cs index 8ad9c7e..bc179cd 100644 --- a/Ooui.Forms/Exports.cs +++ b/Ooui.Forms/Exports.cs @@ -10,6 +10,7 @@ using Xamarin.Forms.Internals; [assembly: ExportRenderer (typeof (Button), typeof (ButtonRenderer))] [assembly: ExportRenderer (typeof (Entry), typeof (EntryRenderer))] [assembly: ExportRenderer (typeof (Label), typeof (LabelRenderer))] +[assembly: ExportRenderer (typeof (ProgressBar), typeof (ProgressBarRenderer))] namespace Ooui.Forms { diff --git a/Ooui.Forms/Renderers/ProgressBarRenderer.cs b/Ooui.Forms/Renderers/ProgressBarRenderer.cs new file mode 100644 index 0000000..ddeff72 --- /dev/null +++ b/Ooui.Forms/Renderers/ProgressBarRenderer.cs @@ -0,0 +1,51 @@ +using System; +using System.ComponentModel; +using System.Linq; +using Xamarin.Forms; + +namespace Ooui.Forms.Renderers +{ + public class ProgressBarRenderer : ViewRenderer + { + public override SizeRequest GetDesiredSize (double widthConstraint, double heightConstraint) + { + var size = new Size (80, 20); + return new SizeRequest (size, size); + } + + protected override void OnElementChanged (ElementChangedEventArgs e) + { + if (e.NewElement != null) { + if (Control == null) { + var p = new Div { ClassName = "progress" }; + var pb = new Div { ClassName = "progress-bar progress-bar" }; + pb.SetAttribute ("role", "progressbar"); + pb.SetAttribute ("aria-valuenow", "0"); + pb.SetAttribute ("aria-valuemin", "0"); + pb.SetAttribute ("aria-valuemax", "100"); + pb.Style.Width = "0%"; + p.AppendChild (pb); + SetNativeControl (p); + } + + UpdateProgress (); + } + + base.OnElementChanged (e); + } + + protected override void OnElementPropertyChanged (object sender, PropertyChangedEventArgs e) + { + base.OnElementPropertyChanged (sender, e); + + if (e.PropertyName == ProgressBar.ProgressProperty.PropertyName) + UpdateProgress (); + } + + void UpdateProgress () + { + var pb = Control?.Children.FirstOrDefault () as Div; + pb.Style.Width = string.Format (System.Globalization.CultureInfo.InvariantCulture, "{0}%", Element.Progress*100); + } + } +} diff --git a/Samples/DisplayAlertPage.xaml b/Samples/DisplayAlertPage.xaml index 0caca42..b5deb93 100644 --- a/Samples/DisplayAlertPage.xaml +++ b/Samples/DisplayAlertPage.xaml @@ -6,6 +6,7 @@