feat(dock): implement grid and gridsplitter generation for groups
This commit is contained in:
@@ -36,6 +36,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="CommunityToolkit.WinUI.Controls.Primitives" Version="8.2.251219" />
|
<PackageReference Include="CommunityToolkit.WinUI.Controls.Primitives" Version="8.2.251219" />
|
||||||
|
<PackageReference Include="CommunityToolkit.WinUI.Controls.Sizers" Version="8.2.251219" />
|
||||||
<PackageReference Include="CommunityToolkit.WinUI.Controls.TabbedCommandBar" Version="8.2.251219" />
|
<PackageReference Include="CommunityToolkit.WinUI.Controls.TabbedCommandBar" Version="8.2.251219" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.2" />
|
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.2" />
|
||||||
<PackageReference Include="Microsoft.Windows.CsWinRT" Version="2.2.0" />
|
<PackageReference Include="Microsoft.Windows.CsWinRT" Version="2.2.0" />
|
||||||
|
|||||||
@@ -177,30 +177,47 @@ public sealed partial class DockLayout : Control
|
|||||||
if (node is DockGroupNode groupNode)
|
if (node is DockGroupNode groupNode)
|
||||||
{
|
{
|
||||||
var grid = new Grid();
|
var grid = new Grid();
|
||||||
var children = groupNode.Children;
|
bool isHorizontal = groupNode.Orientation == Orientation.Horizontal;
|
||||||
|
int childCount = groupNode.Children.Count;
|
||||||
|
|
||||||
for (int i = 0; i < children.Count; i++)
|
for (int i = 0; i < childCount; i++)
|
||||||
{
|
{
|
||||||
if (groupNode.Orientation == Orientation.Horizontal)
|
var childNode = groupNode.Children[i];
|
||||||
|
var childUI = CreateUIForNode(childNode);
|
||||||
|
|
||||||
|
if (isHorizontal)
|
||||||
{
|
{
|
||||||
grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });
|
grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });
|
||||||
|
Grid.SetColumn((FrameworkElement)childUI, i * 2);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) });
|
grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) });
|
||||||
|
Grid.SetRow((FrameworkElement)childUI, i * 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
var childUI = CreateUIForNode(children[i]);
|
grid.Children.Add(childUI);
|
||||||
if (groupNode.Orientation == Orientation.Horizontal)
|
|
||||||
|
// Add GridSplitter between children
|
||||||
|
if (i < childCount - 1)
|
||||||
{
|
{
|
||||||
Grid.SetColumn((FrameworkElement)childUI, i);
|
if (isHorizontal)
|
||||||
|
{
|
||||||
|
grid.ColumnDefinitions.Add(new ColumnDefinition { Width = GridLength.Auto });
|
||||||
|
var splitter = new CommunityToolkit.WinUI.Controls.GridSplitter { Width = 4, HorizontalAlignment = HorizontalAlignment.Center, ResizeDirection = CommunityToolkit.WinUI.Controls.GridSplitter.GridResizeDirection.Columns };
|
||||||
|
Grid.SetColumn(splitter, (i * 2) + 1);
|
||||||
|
grid.Children.Add(splitter);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Grid.SetRow((FrameworkElement)childUI, i);
|
grid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto });
|
||||||
|
var splitter = new CommunityToolkit.WinUI.Controls.GridSplitter { Height = 4, VerticalAlignment = VerticalAlignment.Center, ResizeDirection = CommunityToolkit.WinUI.Controls.GridSplitter.GridResizeDirection.Rows };
|
||||||
|
Grid.SetRow(splitter, (i * 2) + 1);
|
||||||
|
grid.Children.Add(splitter);
|
||||||
}
|
}
|
||||||
grid.Children.Add(childUI);
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return grid;
|
return grid;
|
||||||
}
|
}
|
||||||
else if (node is DockPanelNode panelNode)
|
else if (node is DockPanelNode panelNode)
|
||||||
@@ -209,7 +226,10 @@ public sealed partial class DockLayout : Control
|
|||||||
{
|
{
|
||||||
TabItemsSource = panelNode.Items,
|
TabItemsSource = panelNode.Items,
|
||||||
HorizontalAlignment = HorizontalAlignment.Stretch,
|
HorizontalAlignment = HorizontalAlignment.Stretch,
|
||||||
VerticalAlignment = VerticalAlignment.Stretch
|
VerticalAlignment = VerticalAlignment.Stretch,
|
||||||
|
CanDragTabs = true,
|
||||||
|
AllowDrop = true,
|
||||||
|
Tag = panelNode // Store reference to data node
|
||||||
};
|
};
|
||||||
|
|
||||||
// Bind selection state using TabView DPs
|
// Bind selection state using TabView DPs
|
||||||
|
|||||||
Reference in New Issue
Block a user