Added SliderRenderer and Slider Sample
This commit is contained in:
parent
1bd07e7cfa
commit
f12708d314
|
@ -15,6 +15,7 @@ using Xamarin.Forms;
|
||||||
[assembly: ExportRenderer(typeof(Label), typeof(LabelRenderer))]
|
[assembly: ExportRenderer(typeof(Label), typeof(LabelRenderer))]
|
||||||
[assembly: ExportRenderer(typeof(ProgressBar), typeof(ProgressBarRenderer))]
|
[assembly: ExportRenderer(typeof(ProgressBar), typeof(ProgressBarRenderer))]
|
||||||
[assembly: ExportRenderer(typeof(SearchBar), typeof(SearchBarRenderer))]
|
[assembly: ExportRenderer(typeof(SearchBar), typeof(SearchBarRenderer))]
|
||||||
|
[assembly: ExportRenderer(typeof(Slider), typeof(SliderRenderer))]
|
||||||
[assembly: ExportRenderer(typeof(Switch), typeof(SwitchRenderer))]
|
[assembly: ExportRenderer(typeof(Switch), typeof(SwitchRenderer))]
|
||||||
[assembly: ExportRenderer(typeof(TimePicker), typeof(TimePickerRenderer))]
|
[assembly: ExportRenderer(typeof(TimePicker), typeof(TimePickerRenderer))]
|
||||||
[assembly: ExportImageSourceHandler(typeof(FileImageSource), typeof(FileImageSourceHandler))]
|
[assembly: ExportImageSourceHandler(typeof(FileImageSource), typeof(FileImageSourceHandler))]
|
||||||
|
|
|
@ -0,0 +1,93 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
using Xamarin.Forms;
|
||||||
|
|
||||||
|
namespace Ooui.Forms.Renderers
|
||||||
|
{
|
||||||
|
public class SliderRenderer : ViewRenderer<Slider, Input>
|
||||||
|
{
|
||||||
|
private bool _disposed;
|
||||||
|
|
||||||
|
IElementController ElementController => Element as IElementController;
|
||||||
|
|
||||||
|
public override SizeRequest GetDesiredSize(double widthConstraint, double heightConstraint)
|
||||||
|
{
|
||||||
|
var size = new Size(100, 38);
|
||||||
|
return new SizeRequest(size, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnElementChanged(ElementChangedEventArgs<Slider> e)
|
||||||
|
{
|
||||||
|
base.OnElementChanged(e);
|
||||||
|
|
||||||
|
if (e.NewElement == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (Control == null)
|
||||||
|
{
|
||||||
|
var range = new Input
|
||||||
|
{
|
||||||
|
ClassName = "form-control",
|
||||||
|
Type = InputType.Range
|
||||||
|
};
|
||||||
|
|
||||||
|
range.Change += OnValueChange;
|
||||||
|
|
||||||
|
SetNativeControl(range);
|
||||||
|
}
|
||||||
|
|
||||||
|
UpdateMaximum();
|
||||||
|
UpdateMinimum();
|
||||||
|
UpdateValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
|
||||||
|
{
|
||||||
|
base.OnElementPropertyChanged(sender, e);
|
||||||
|
|
||||||
|
if (e.PropertyName == Slider.MaximumProperty.PropertyName)
|
||||||
|
UpdateMaximum();
|
||||||
|
else if (e.PropertyName == Slider.MinimumProperty.PropertyName)
|
||||||
|
UpdateMinimum();
|
||||||
|
else if (e.PropertyName == Slider.ValueProperty.PropertyName)
|
||||||
|
UpdateValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (_disposed)
|
||||||
|
return;
|
||||||
|
|
||||||
|
_disposed = true;
|
||||||
|
|
||||||
|
if (disposing)
|
||||||
|
{
|
||||||
|
if (Control != null)
|
||||||
|
{
|
||||||
|
Control.Change -= OnValueChange;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateMaximum()
|
||||||
|
{
|
||||||
|
Control.Maximum = Element.Maximum;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateMinimum()
|
||||||
|
{
|
||||||
|
Control.Minimum = Element.Minimum;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateValue()
|
||||||
|
{
|
||||||
|
Control.NumberValue = Element.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnValueChange(object sender, TargetEventArgs e)
|
||||||
|
{
|
||||||
|
ElementController.SetValueFromRenderer(Slider.ValueProperty, Control.NumberValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -33,6 +33,7 @@ namespace Samples
|
||||||
new DotMatrixClockSample().Publish();
|
new DotMatrixClockSample().Publish();
|
||||||
new EditorSample().Publish();
|
new EditorSample().Publish();
|
||||||
new SearchBarSample().Publish();
|
new SearchBarSample().Publish();
|
||||||
|
new SliderSample().Publish();
|
||||||
new TimePickerSample().Publish();
|
new TimePickerSample().Publish();
|
||||||
new TipCalcSample().Publish();
|
new TipCalcSample().Publish();
|
||||||
new WeatherAppSample().Publish();
|
new WeatherAppSample().Publish();
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
using Ooui;
|
||||||
|
using System;
|
||||||
|
using Xamarin.Forms;
|
||||||
|
|
||||||
|
namespace Samples
|
||||||
|
{
|
||||||
|
public class SliderSample : ISample
|
||||||
|
{
|
||||||
|
private Xamarin.Forms.Label _label;
|
||||||
|
|
||||||
|
public string Title => "Xamarin.Forms Slider Sample";
|
||||||
|
|
||||||
|
public Ooui.Element CreateElement()
|
||||||
|
{
|
||||||
|
var panel = new StackLayout();
|
||||||
|
|
||||||
|
var titleLabel = new Xamarin.Forms.Label
|
||||||
|
{
|
||||||
|
Text = "Slider",
|
||||||
|
FontSize = 24,
|
||||||
|
FontAttributes = FontAttributes.Bold
|
||||||
|
};
|
||||||
|
panel.Children.Add(titleLabel);
|
||||||
|
|
||||||
|
Slider slider = new Slider
|
||||||
|
{
|
||||||
|
Minimum = 0,
|
||||||
|
Maximum = 100
|
||||||
|
};
|
||||||
|
panel.Children.Add(slider);
|
||||||
|
|
||||||
|
slider.ValueChanged += OnSliderValueChanged;
|
||||||
|
|
||||||
|
_label = new Xamarin.Forms.Label
|
||||||
|
{
|
||||||
|
Text = "Slider value is 0",
|
||||||
|
HorizontalOptions = LayoutOptions.Center
|
||||||
|
};
|
||||||
|
panel.Children.Add(_label);
|
||||||
|
|
||||||
|
var page = new ContentPage
|
||||||
|
{
|
||||||
|
Content = panel
|
||||||
|
};
|
||||||
|
|
||||||
|
return page.GetOouiElement();
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnSliderValueChanged(object sender, ValueChangedEventArgs e)
|
||||||
|
{
|
||||||
|
_label.Text = String.Format("Slider value is {0:F1}", e.NewValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Publish()
|
||||||
|
{
|
||||||
|
UI.Publish("/slider", CreateElement);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue