Last active
August 29, 2015 14:05
-
-
Save jameymcelveen/8d2ad94174dacfb0f3e5 to your computer and use it in GitHub Desktop.
Pixate iOS helper for Xamarin.Forms. This class copies style info from Xamarin.Forms elements into the underlying native component.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using Xamarin.Forms; | |
using Xamarin.Forms.Platform.iOS; | |
using YourProject.iOS; | |
using System.ComponentModel; | |
using MonoTouch.UIKit; | |
using MonoTouch.Foundation; | |
using PixateFreestyleLib; | |
using Common; | |
[assembly: ExportRenderer(typeof(Entry), typeof(StyledEntryRenderer))] | |
[assembly: ExportRenderer(typeof(Button), typeof(StyledButtonRenderer))] | |
[assembly: ExportRenderer(typeof(Image), typeof(StyledImageRenderer))] | |
[assembly: ExportRenderer(typeof(Label), typeof(StyledLabelRenderer))] | |
[assembly: ExportRenderer (typeof(ListView), typeof(StyledListViewRenderer))] | |
[assembly: ExportRenderer (typeof(ViewCell), typeof(StyledViewCellRenderer))] | |
[assembly: ExportRenderer (typeof(TextCell), typeof(StyledTextCellRenderer))] | |
[assembly: ExportRenderer (typeof(ImageCell), typeof(StyledImageCellRenderer))] | |
namespace YourProject.iOS | |
{ | |
public static class StyledRenderer { | |
public static void UpdateStyle (UIView view, VisualElement model = null) { | |
var styleId = model.StyleId; | |
var classId = model.ClassId; | |
UpdateStyle (view, styleId, classId); | |
} | |
public static void UpdateStyle (UIView view, string styleId, string classId) { | |
if (!string.IsNullOrWhiteSpace (styleId)) { | |
view.SetStyleId (styleId); | |
} | |
if (!string.IsNullOrWhiteSpace (classId)) { | |
view.SetStyleClass(classId); | |
} | |
view.UpdateStylesNonRecursivelyAsync (); | |
} | |
public static void StyleOnHandlePropertyChanged (this NativeRenderer nr, object sender, PropertyChangedEventArgs e) { | |
if (e.PropertyName == "ClassId" || e.PropertyName == "StyleId") { | |
StyledRenderer.UpdateStyle (nr.Control, nr.Model); | |
} | |
} | |
public static void StyleOnModelSet (this NativeRenderer nr, VisualElement model) { | |
StyledRenderer.UpdateStyle (nr.Control, nr.Model); | |
} | |
} | |
public class StyledEntryRenderer : EntryRenderer | |
{ | |
protected override void OnHandlePropertyChanged (object sender, PropertyChangedEventArgs e) { | |
base.OnHandlePropertyChanged (sender, e); | |
this.StyleOnHandlePropertyChanged (sender, e); | |
} | |
protected override void OnModelSet (VisualElement model) { | |
base.OnModelSet (model); | |
this.StyleOnModelSet (model); | |
} | |
} | |
public class StyledButtonRenderer : ButtonRenderer | |
{ | |
protected override void OnHandlePropertyChanged (object sender, PropertyChangedEventArgs e) { | |
base.OnHandlePropertyChanged (sender, e); | |
this.StyleOnHandlePropertyChanged (sender, e); | |
} | |
protected override void OnModelSet (VisualElement model) { | |
base.OnModelSet (model); | |
this.StyleOnModelSet (model); | |
} | |
} | |
public class StyledLabelRenderer : LabelRenderer | |
{ | |
protected override void OnHandlePropertyChanged (object sender, PropertyChangedEventArgs e) { | |
base.OnHandlePropertyChanged (sender, e); | |
this.StyleOnHandlePropertyChanged (sender, e); | |
} | |
protected override void OnModelSet (VisualElement model) { | |
base.OnModelSet (model); | |
this.StyleOnModelSet (model); | |
} | |
} | |
public class StyledImageRenderer : ImageRenderer | |
{ | |
protected override void OnHandlePropertyChanged (object sender, PropertyChangedEventArgs e) { | |
base.OnHandlePropertyChanged (sender, e); | |
this.StyleOnHandlePropertyChanged (sender, e); | |
} | |
protected override void OnModelSet (VisualElement model) { | |
base.OnModelSet (model); | |
this.StyleOnModelSet (model); | |
} | |
} | |
public class StyledListViewRenderer : ListViewRenderer | |
{ | |
protected override void OnHandlePropertyChanged (object sender, PropertyChangedEventArgs e) { | |
base.OnHandlePropertyChanged (sender, e); | |
this.StyleOnHandlePropertyChanged (sender, e); | |
} | |
protected override void OnModelSet (VisualElement model) { | |
base.OnModelSet (model); | |
this.StyleOnModelSet (model); | |
} | |
} | |
public class StyledViewCellRenderer : ViewCellRenderer | |
{ | |
public override UITableViewCell GetCell (Cell item, UITableView tv) | |
{ | |
var cell = base.GetCell (item, tv); | |
StyledRenderer.UpdateStyle (cell, item.StyleId, item.ClassId); | |
return cell; | |
} | |
} | |
public class StyledTextCellRenderer : TextCellRenderer | |
{ | |
public override UITableViewCell GetCell (Cell item, UITableView tv) | |
{ | |
var cell = base.GetCell (item, tv); | |
StyledRenderer.UpdateStyle (cell, item.StyleId, item.ClassId); | |
return cell; | |
} | |
} | |
public class StyledImageCellRenderer : ImageCellRenderer | |
{ | |
public override UITableViewCell GetCell (Cell item, UITableView tv) | |
{ | |
var cell = base.GetCell (item, tv); | |
StyledRenderer.UpdateStyle (cell, item.StyleId, item.ClassId); | |
return cell; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@jameymcelveen: This works great on iOS and I was wondering if you had a sample for Android.