Browse Source

Remove LINQ from Visual and StyledElement attach/detach funtions.

pull/3560/head
Dariusz Komosinski 7 years ago
parent
commit
c91559548e
  1. 27
      src/Avalonia.Styling/StyledElement.cs
  2. 26
      src/Avalonia.Visuals/Visual.cs

27
src/Avalonia.Styling/StyledElement.cs

@ -650,9 +650,12 @@ namespace Avalonia
element._dataContextUpdating = true;
element.OnDataContextBeginUpdate();
foreach (var child in element.LogicalChildren)
var logicalChildren = element.LogicalChildren;
var logicalChildrenCount = logicalChildren.Count;
for (var i = 0; i < logicalChildrenCount; i++)
{
if (child is StyledElement s &&
if (element.LogicalChildren[i] is StyledElement s &&
s.InheritanceParent == element &&
!s.IsSet(DataContextProperty))
{
@ -723,9 +726,15 @@ namespace Avalonia
AttachedToLogicalTree?.Invoke(this, e);
}
foreach (var child in LogicalChildren.OfType<StyledElement>())
var logicalChildren = LogicalChildren;
var logicalChildrenCount = logicalChildren.Count;
for (var i = 0; i < logicalChildrenCount; i++)
{
child.OnAttachedToLogicalTreeCore(e);
if (logicalChildren[i] is StyledElement child)
{
child.OnAttachedToLogicalTreeCore(e);
}
}
}
@ -738,9 +747,15 @@ namespace Avalonia
OnDetachedFromLogicalTree(e);
DetachedFromLogicalTree?.Invoke(this, e);
foreach (var child in LogicalChildren.OfType<StyledElement>())
var logicalChildren = LogicalChildren;
var logicalChildrenCount = logicalChildren.Count;
for (var i = 0; i < logicalChildrenCount; i++)
{
child.OnDetachedFromLogicalTreeCore(e);
if (logicalChildren[i] is StyledElement child)
{
child.OnDetachedFromLogicalTreeCore(e);
}
}
#if DEBUG

26
src/Avalonia.Visuals/Visual.cs

@ -386,11 +386,18 @@ namespace Avalonia
AttachedToVisualTree?.Invoke(this, e);
InvalidateVisual();
if (VisualChildren != null)
var visualChildren = VisualChildren;
if (visualChildren != null)
{
foreach (Visual child in VisualChildren.OfType<Visual>())
var visualChildrenCount = visualChildren.Count;
for (var i = 0; i < visualChildrenCount; i++)
{
child.OnAttachedToVisualTreeCore(e);
if (visualChildren[i] is Visual child)
{
child.OnAttachedToVisualTreeCore(e);
}
}
}
}
@ -415,11 +422,18 @@ namespace Avalonia
DetachedFromVisualTree?.Invoke(this, e);
e.Root?.Renderer?.AddDirty(this);
if (VisualChildren != null)
var visualChildren = VisualChildren;
if (visualChildren != null)
{
foreach (Visual child in VisualChildren.OfType<Visual>())
var visualChildrenCount = visualChildren.Count;
for (var i = 0; i < visualChildrenCount; i++)
{
child.OnDetachedFromVisualTreeCore(e);
if (visualChildren[i] is Visual child)
{
child.OnDetachedFromVisualTreeCore(e);
}
}
}
}

Loading…
Cancel
Save