Monthly calendar basics.
This commit is contained in:
87
Wino.Core.UWP/Controls/EqualGridPanel.cs
Normal file
87
Wino.Core.UWP/Controls/EqualGridPanel.cs
Normal file
@@ -0,0 +1,87 @@
|
||||
using Windows.Foundation;
|
||||
using Windows.UI.Xaml;
|
||||
using Windows.UI.Xaml.Controls;
|
||||
|
||||
namespace Wino.Core.UWP.Controls
|
||||
{
|
||||
public class EqualGridPanel : Panel
|
||||
{
|
||||
public int Rows
|
||||
{
|
||||
get { return (int)GetValue(RowsProperty); }
|
||||
set { SetValue(RowsProperty, value); }
|
||||
}
|
||||
|
||||
public static readonly DependencyProperty RowsProperty =
|
||||
DependencyProperty.Register(
|
||||
nameof(Rows),
|
||||
typeof(int),
|
||||
typeof(EqualGridPanel),
|
||||
new PropertyMetadata(1, OnLayoutPropertyChanged));
|
||||
|
||||
public int Columns
|
||||
{
|
||||
get { return (int)GetValue(ColumnsProperty); }
|
||||
set { SetValue(ColumnsProperty, value); }
|
||||
}
|
||||
|
||||
public static readonly DependencyProperty ColumnsProperty =
|
||||
DependencyProperty.Register(
|
||||
nameof(Columns),
|
||||
typeof(int),
|
||||
typeof(EqualGridPanel),
|
||||
new PropertyMetadata(1, OnLayoutPropertyChanged));
|
||||
|
||||
private static void OnLayoutPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
||||
{
|
||||
if (d is EqualGridPanel panel)
|
||||
{
|
||||
panel.InvalidateMeasure();
|
||||
panel.InvalidateArrange();
|
||||
}
|
||||
}
|
||||
|
||||
protected override Size MeasureOverride(Size availableSize)
|
||||
{
|
||||
if (Rows <= 0 || Columns <= 0)
|
||||
{
|
||||
return new Size(0, 0);
|
||||
}
|
||||
|
||||
double cellWidth = availableSize.Width / Columns;
|
||||
double cellHeight = availableSize.Height / Rows;
|
||||
|
||||
foreach (UIElement child in Children)
|
||||
{
|
||||
child.Measure(new Size(cellWidth, cellHeight));
|
||||
}
|
||||
|
||||
return availableSize;
|
||||
}
|
||||
|
||||
protected override Size ArrangeOverride(Size finalSize)
|
||||
{
|
||||
if (Rows <= 0 || Columns <= 0)
|
||||
{
|
||||
return new Size(0, 0);
|
||||
}
|
||||
|
||||
double cellWidth = finalSize.Width / Columns;
|
||||
double cellHeight = finalSize.Height / Rows;
|
||||
|
||||
for (int i = 0; i < Children.Count; i++)
|
||||
{
|
||||
int row = i / Columns;
|
||||
int column = i % Columns;
|
||||
|
||||
double x = column * cellWidth;
|
||||
double y = row * cellHeight;
|
||||
|
||||
Rect rect = new Rect(x, y, cellWidth, cellHeight);
|
||||
Children[i].Arrange(rect);
|
||||
}
|
||||
|
||||
return finalSize;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user