瀏覽代碼

Handle detached visuals in dirty list.

Steven Kirk 9 年之前
父節點
當前提交
74c263ee8f
共有 2 個文件被更改,包括 16 次插入2 次删除
  1. 1 1
      samples/ControlCatalog/MainWindow.xaml.cs
  2. 15 1
      src/Avalonia.Visuals/Rendering/DirtyVisuals.cs

+ 1 - 1
samples/ControlCatalog/MainWindow.xaml.cs

@@ -10,7 +10,7 @@ namespace ControlCatalog
         {
             this.InitializeComponent();
             this.AttachDevTools();
-            //Renderer.DrawDirtyRects = Renderer.DrawFps = true;
+            Renderer.DrawDirtyRects = Renderer.DrawFps = true;
         }
 
         private void InitializeComponent()

+ 15 - 1
src/Avalonia.Visuals/Rendering/DirtyVisuals.cs

@@ -14,7 +14,7 @@ namespace Avalonia.Rendering
 
         public void Add(IVisual visual)
         {
-            var distance = visual.CalculateDistanceFromVisualRoot();
+            var distance = visual.IsAttachedToVisualTree ? visual.CalculateDistanceFromVisualRoot() : -1;
             int existingDistance;
 
             if (_index.TryGetValue(visual, out existingDistance))
@@ -46,6 +46,20 @@ namespace Avalonia.Rendering
             _index.Clear();
         }
 
+        public bool Remove(IVisual visual)
+        {
+            int distance;
+
+            if (_index.TryGetValue(visual, out distance))
+            {
+                _inner[distance].Remove(visual);
+                _index.Remove(visual);
+                return true;
+            }
+
+            return false;
+        }
+
         public IEnumerator<IVisual> GetEnumerator()
         {
             foreach (var i in _inner)