fix(dock): prevent render-feedback loop and improve drag state cleanup

This commit is contained in:
2026-03-28 18:32:10 +09:00
parent 3c9c95ad73
commit 777c4ef31d
2 changed files with 1 additions and 8 deletions

View File

@@ -61,6 +61,7 @@ public sealed partial class DockLayout
private void ClearDragOperationState() private void ClearDragOperationState()
{ {
_lastTargetElement = null;
ClearOverlayState(); ClearOverlayState();
} }

View File

@@ -19,7 +19,6 @@ public sealed partial class DockLayout
if (node is DockGroupNode groupNode) if (node is DockGroupNode groupNode)
{ {
((INotifyCollectionChanged)groupNode.Children).CollectionChanged += OnChildrenCollectionChanged; ((INotifyCollectionChanged)groupNode.Children).CollectionChanged += OnChildrenCollectionChanged;
groupNode.Sizes.CollectionChanged += OnSizesCollectionChanged;
foreach (var child in groupNode.Children) foreach (var child in groupNode.Children)
{ {
SubscribeToNode(child); SubscribeToNode(child);
@@ -39,7 +38,6 @@ public sealed partial class DockLayout
if (node is DockGroupNode groupNode) if (node is DockGroupNode groupNode)
{ {
((INotifyCollectionChanged)groupNode.Children).CollectionChanged -= OnChildrenCollectionChanged; ((INotifyCollectionChanged)groupNode.Children).CollectionChanged -= OnChildrenCollectionChanged;
groupNode.Sizes.CollectionChanged -= OnSizesCollectionChanged;
foreach (var child in groupNode.Children) foreach (var child in groupNode.Children)
{ {
UnsubscribeFromNode(child); UnsubscribeFromNode(child);
@@ -57,17 +55,11 @@ public sealed partial class DockLayout
if (node is DockGroupNode groupNode) if (node is DockGroupNode groupNode)
{ {
((INotifyCollectionChanged)groupNode.Children).CollectionChanged -= OnChildrenCollectionChanged; ((INotifyCollectionChanged)groupNode.Children).CollectionChanged -= OnChildrenCollectionChanged;
groupNode.Sizes.CollectionChanged -= OnSizesCollectionChanged;
} }
} }
_subscribedNodes.Clear(); _subscribedNodes.Clear();
} }
private void OnSizesCollectionChanged(object? sender, NotifyCollectionChangedEventArgs e)
{
RenderTree();
}
private void OnNodePropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e) private void OnNodePropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e)
{ {
// Filter to structural property names // Filter to structural property names