summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Build.Tasks/SetPropertiesVisitor.cs
diff options
context:
space:
mode:
authorStephane Delcroix <stephane@delcroix.org>2017-01-25 14:47:27 +0100
committerGitHub <noreply@github.com>2017-01-25 14:47:27 +0100
commitf30aa8ae2c54172df237a80dfff7a6eb0c679195 (patch)
treec0c0f3e0a9ed58972cf3a4277c29ef2e3da2dd1c /Xamarin.Forms.Build.Tasks/SetPropertiesVisitor.cs
parentebb24b7edd2b297f259eadfa4686e03c96504f1d (diff)
downloadxamarin-forms-f30aa8ae2c54172df237a80dfff7a6eb0c679195.tar.gz
xamarin-forms-f30aa8ae2c54172df237a80dfff7a6eb0c679195.tar.bz2
xamarin-forms-f30aa8ae2c54172df237a80dfff7a6eb0c679195.zip
[Xaml[C]] Do not instantiate DataTemplate Content at parsing time (#683)
* [Xaml] rename VisitChildrenFirst * [Xaml] rework SkipChildren in XamlNode * [Xaml] fix 45179 * fix
Diffstat (limited to 'Xamarin.Forms.Build.Tasks/SetPropertiesVisitor.cs')
-rw-r--r--Xamarin.Forms.Build.Tasks/SetPropertiesVisitor.cs17
1 files changed, 10 insertions, 7 deletions
diff --git a/Xamarin.Forms.Build.Tasks/SetPropertiesVisitor.cs b/Xamarin.Forms.Build.Tasks/SetPropertiesVisitor.cs
index 9cf62221..4a8fd70c 100644
--- a/Xamarin.Forms.Build.Tasks/SetPropertiesVisitor.cs
+++ b/Xamarin.Forms.Build.Tasks/SetPropertiesVisitor.cs
@@ -37,8 +37,9 @@ namespace Xamarin.Forms.Build.Tasks
public ILContext Context { get; }
public bool StopOnResourceDictionary { get; }
- public bool VisitChildrenFirst { get; } = true;
- public bool StopOnDataTemplate { get; } = true;
+ public TreeVisitingMode VisitingMode => TreeVisitingMode.BottomUp;
+ public bool StopOnDataTemplate => true;
+ public bool VisitNodeOnDataTemplate => true;
ModuleDefinition Module { get; }
@@ -88,6 +89,11 @@ namespace Xamarin.Forms.Build.Tasks
if ((propertyName != XmlName.Empty || TryGetPropertyName(node, parentNode, out propertyName)) && skips.Contains(propertyName))
return;
+ if (propertyName == XmlName._CreateContent) {
+ SetDataTemplate((IElementNode)parentNode, node, Context, node);
+ return;
+ }
+
//if this node is an IMarkupExtension, invoke ProvideValue() and replace the variable
var vardef = Context.Variables[node];
var vardefref = new VariableDefinitionReference(vardef);
@@ -114,11 +120,8 @@ namespace Xamarin.Forms.Build.Tasks
return;
if (parentNode is IElementNode && ((IElementNode)parentNode).SkipProperties.Contains (propertyName))
return;
-
- if (propertyName == XmlName._CreateContent)
- SetDataTemplate((IElementNode)parentNode, node, Context, node);
- else
- Context.IL.Append(SetPropertyValue(Context.Variables[(IElementNode)parentNode], propertyName, node, Context, node));
+
+ Context.IL.Append(SetPropertyValue(Context.Variables[(IElementNode)parentNode], propertyName, node, Context, node));
}
else if (IsCollectionItem(node, parentNode) && parentNode is IElementNode)
{