-
Notifications
You must be signed in to change notification settings - Fork 1.7k
/
EntryCellRenderer.cs
73 lines (62 loc) · 2.07 KB
/
EntryCellRenderer.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
using System;
using System.ComponentModel;
using Xamarin.Forms.Platform.GTK.Extensions;
namespace Xamarin.Forms.Platform.GTK.Cells
{
public class EntryCellRenderer : CellRenderer
{
public override CellBase GetCell(Cell item, Gtk.Container reusableView, Controls.ListView listView)
{
var entryCell = base.GetCell(item, reusableView, listView) as EntryCell;
entryCell.TextChanged -= OnTextChanged;
entryCell.TextChanged += OnTextChanged;
entryCell.EditingDone -= OnEditingDone;
entryCell.EditingDone += OnEditingDone;
return entryCell;
}
protected override Gtk.Container GetCellWidgetInstance(Cell item)
{
var entryCell = (Xamarin.Forms.EntryCell)item;
var label = entryCell.Label ?? string.Empty;
var labelColor = entryCell.LabelColor.ToGtkColor();
var text = entryCell.Text ?? string.Empty;
var placeholder = entryCell.Placeholder;
return new EntryCell(
label,
labelColor,
text,
placeholder);
}
protected override void CellPropertyChanged(object sender, PropertyChangedEventArgs args)
{
base.CellPropertyChanged(sender, args);
var gtkEntryCell = (EntryCell)sender;
var entryCell = (Xamarin.Forms.EntryCell)gtkEntryCell.Cell;
if (args.PropertyName == Xamarin.Forms.EntryCell.LabelProperty.PropertyName)
{
gtkEntryCell.Label = entryCell.Label ?? string.Empty;
}
else if (args.PropertyName == Xamarin.Forms.EntryCell.LabelColorProperty.PropertyName)
{
gtkEntryCell.LabelColor = entryCell.LabelColor.ToGtkColor();
}
else if (args.PropertyName == Xamarin.Forms.EntryCell.TextProperty.PropertyName)
{
gtkEntryCell.Text = entryCell.Text ?? string.Empty;
}
else if (args.PropertyName == Xamarin.Forms.EntryCell.PlaceholderProperty.PropertyName)
{
gtkEntryCell.Placeholder = entryCell.Placeholder;
}
}
private void OnTextChanged(object sender, string text)
{
((Xamarin.Forms.EntryCell)Cell).Text = text ?? string.Empty;
}
private void OnEditingDone(object sender, EventArgs e)
{
var entryCell = (IEntryCellController)Cell;
entryCell.SendCompleted();
}
}
}