blob: 6dc8280de5647ce546e4300792486ae6c2592e5e (
plain)
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
|
using System;
using Xamarin.Forms.Internals;
using Xamarin.Forms.Xaml.Internals;
namespace Xamarin.Forms.Xaml
{
[ContentProperty("Name")]
public class ReferenceExtension : IMarkupExtension
{
public string Name { get; set; }
public object ProvideValue(IServiceProvider serviceProvider)
{
if (serviceProvider == null)
throw new ArgumentNullException("serviceProvider");
var valueProvider = serviceProvider.GetService(typeof (IProvideValueTarget)) as IProvideParentValues;
if (valueProvider == null)
throw new ArgumentException("serviceProvider does not provide an IProvideValueTarget");
var namescopeprovider = serviceProvider.GetService(typeof (INameScopeProvider)) as INameScopeProvider;
if (namescopeprovider != null && namescopeprovider.NameScope != null)
{
var value = namescopeprovider.NameScope.FindByName(Name);
if (value != null)
return value;
}
foreach (var target in valueProvider.ParentObjects)
{
var ns = target as INameScope;
if (ns == null)
continue;
var value = ns.FindByName(Name);
if (value != null)
return value;
}
throw new Exception("Can't resolve name on Element");
}
}
}
|