Implement custom wrap panel for reading page.

This commit is contained in:
Burak Kaan Köse
2024-11-27 01:42:50 +01:00
parent 20fc34a6fd
commit c3f98e327c
2 changed files with 77 additions and 5 deletions

View File

@@ -0,0 +1,70 @@
using System;
namespace Wino.Core.UWP.Controls
{
using Windows.Foundation;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
namespace CustomControls
{
public class CustomWrapPanel : Panel
{
protected override Size MeasureOverride(Size availableSize)
{
double currentRowWidth = 0;
double currentRowHeight = 0;
double totalHeight = 0;
foreach (UIElement child in Children)
{
child.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
var childDesiredSize = child.DesiredSize;
if (currentRowWidth + childDesiredSize.Width > availableSize.Width)
{
// Wrap to the next row
totalHeight += currentRowHeight;
currentRowWidth = 0;
currentRowHeight = 0;
}
currentRowWidth += childDesiredSize.Width;
currentRowHeight = Math.Max(currentRowHeight, childDesiredSize.Height);
}
totalHeight += currentRowHeight;
return new Size(availableSize.Width, totalHeight);
}
protected override Size ArrangeOverride(Size finalSize)
{
double currentRowWidth = 0;
double currentRowHeight = 0;
double currentY = 0;
foreach (UIElement child in Children)
{
var childDesiredSize = child.DesiredSize;
if (currentRowWidth + childDesiredSize.Width > finalSize.Width)
{
currentY += currentRowHeight;
currentRowWidth = 0;
currentRowHeight = 0;
}
child.Arrange(new Rect(new Point(currentRowWidth, currentY), childDesiredSize));
currentRowWidth += childDesiredSize.Width;
currentRowHeight = Math.Max(currentRowHeight, childDesiredSize.Height);
}
return finalSize;
}
}
}
}

View File

@@ -4,6 +4,7 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:abstract="using:Wino.Views.Abstract" xmlns:abstract="using:Wino.Views.Abstract"
xmlns:controls="using:Wino.Controls" xmlns:controls="using:Wino.Controls"
xmlns:customcontrols="using:Wino.Core.UWP.Controls.CustomControls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:domain="using:Wino.Core.Domain" xmlns:domain="using:Wino.Core.Domain"
xmlns:entities="using:Wino.Core.Domain.Entities.Shared" xmlns:entities="using:Wino.Core.Domain.Entities.Shared"
@@ -100,7 +101,7 @@
</MenuFlyout> </MenuFlyout>
</Grid.ContextFlyout> </Grid.ContextFlyout>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="36" /> <ColumnDefinition Width="40" />
<ColumnDefinition Width="*" /> <ColumnDefinition Width="*" />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
@@ -290,7 +291,7 @@
Visibility="{x:Bind helpers:XamlHelpers.CountToVisibilityConverter(ViewModel.ToItems.Count), Mode=OneWay}"> Visibility="{x:Bind helpers:XamlHelpers.CountToVisibilityConverter(ViewModel.ToItems.Count), Mode=OneWay}">
<ItemsControl.ItemsPanel> <ItemsControl.ItemsPanel>
<ItemsPanelTemplate> <ItemsPanelTemplate>
<toolkit:WrapPanel Orientation="Horizontal" /> <customcontrols:CustomWrapPanel />
</ItemsPanelTemplate> </ItemsPanelTemplate>
</ItemsControl.ItemsPanel> </ItemsControl.ItemsPanel>
</ItemsControl> </ItemsControl>
@@ -313,7 +314,7 @@
Visibility="{x:Bind helpers:XamlHelpers.CountToVisibilityConverter(ViewModel.CcItems.Count), Mode=OneWay}"> Visibility="{x:Bind helpers:XamlHelpers.CountToVisibilityConverter(ViewModel.CcItems.Count), Mode=OneWay}">
<ItemsControl.ItemsPanel> <ItemsControl.ItemsPanel>
<ItemsPanelTemplate> <ItemsPanelTemplate>
<toolkit:WrapPanel Orientation="Horizontal" /> <customcontrols:CustomWrapPanel />
</ItemsPanelTemplate> </ItemsPanelTemplate>
</ItemsControl.ItemsPanel> </ItemsControl.ItemsPanel>
</ItemsControl> </ItemsControl>
@@ -338,7 +339,8 @@
Visibility="{x:Bind helpers:XamlHelpers.CountToVisibilityConverter(ViewModel.BccItems.Count), Mode=OneWay}"> Visibility="{x:Bind helpers:XamlHelpers.CountToVisibilityConverter(ViewModel.BccItems.Count), Mode=OneWay}">
<ItemsControl.ItemsPanel> <ItemsControl.ItemsPanel>
<ItemsPanelTemplate> <ItemsPanelTemplate>
<toolkit:WrapPanel Orientation="Horizontal" /> <customcontrols:CustomWrapPanel />
<!--<toolkit:WrapPanel Orientation="Horizontal" />-->
</ItemsPanelTemplate> </ItemsPanelTemplate>
</ItemsControl.ItemsPanel> </ItemsControl.ItemsPanel>
</ItemsControl> </ItemsControl>
@@ -364,7 +366,7 @@
SelectionMode="None"> SelectionMode="None">
<ItemsControl.ItemsPanel> <ItemsControl.ItemsPanel>
<ItemsPanelTemplate> <ItemsPanelTemplate>
<toolkit:WrapPanel Orientation="Horizontal" /> <customcontrols:CustomWrapPanel />
</ItemsPanelTemplate> </ItemsPanelTemplate>
</ItemsControl.ItemsPanel> </ItemsControl.ItemsPanel>
</ListView> </ListView>