/
xamldroid.cs
99 lines (83 loc) · 1.96 KB
/
xamldroid.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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
using System;
using System.Collections.Generic;
using Android.Content;
using Android.Runtime;
using Android.Util;
using System.Xaml;
namespace Android.Views.Xaml
{
public partial class View : IDisposable
{
public void Dispose ()
{
XamlView.Unregister ((Android.Views.View) this);
base.Dispose ();
}
}
public class XamlView : Android.Widget.LinearLayout
{
public static IntPtr CurrentHandle { get; set; }
public static Context CurrentContext { get; set; }
public XamlView (IntPtr handle, JniHandleOwnership ownership)
: base (handle, ownership)
{
CurrentHandle = handle;
}
static internal Dictionary<object,object> store = new Dictionary<object,object> ();
public static void Register (object key, object value)
{
store.Add (key, value);
}
public static void Unregister (object key)
{
store.Remove (key);
}
public static object GetRegisteredItem (object key)
{
object ret;
return store.TryGetValue (key, out ret) ? ret : null;
}
public XamlView ()
: base (CurrentContext)
{
}
public XamlView (Context context)
: base (context)
{
CurrentContext = context;
}
public XamlView (Context context, IAttributeSet attrs)
: base (context, attrs)
{
CurrentContext = context;
}
public XamlView (View view)
: base (view.Context)
{
CurrentContext = view.Context;
this.view = view;
}
View view;
public void LoadXaml (XamlReader reader)
{
RemoveAllViews ();
view = (Android.Views.Xaml.View)XamlServices.Load(reader);
AddView ((Android.Views.View) view);
}
public void AddView (View view)
{
this.view = view;
AddView ((Android.Views.View) view);
}
protected override void OnLayout (bool changed, int l, int t, int r, int b)
{
if (view != null)
((Android.Views.View) view).Layout (l, t, r, b);
}
protected override void OnDraw (Android.Graphics.Canvas canvas)
{
if (view != null)
((Android.Views.View) view).Draw (canvas);
}
}
}