UWP:显示列表视图项目排列在一个圆圈
问题描述:
我有一个ListView与< 12项绑定到它。我想将这些项目安排在一个圆圈中,同时仍然可以使用ListView功能(selectedItem等)。尽管如此,滚动并不是必需的。UWP:显示列表视图项目排列在一个圆圈
我发现了这个博客文章doing a similar thing in WPF,这可以重写为用于UWP吗?
答
您提供的链接应该在UWP中工作,并且这是正确的方法。你只需要更新命名空间为这样:
using System;
using Windows.Foundation;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
namespace SomeNamespace
{
public class CircularPanel : Panel
{
protected override Size MeasureOverride(Size availableSize)
{
foreach (UIElement child in Children)
child.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
return base.MeasureOverride(availableSize);
}
// Arrange stuff in a circle
protected override Size ArrangeOverride(Size finalSize)
{
if (Children.Count > 0)
{
// Center & radius of panel
Point center = new Point(finalSize.Width/2, finalSize.Height/2);
double radius = Math.Min(finalSize.Width, finalSize.Height)/2.0;
radius *= 0.8; // To avoid hitting edges
// # radians between children
double angleIncrRadians = 2.0 * Math.PI/Children.Count;
double angleInRadians = 0.0;
foreach (UIElement child in Children)
{
Point childPosition = new Point(
radius * Math.Cos(angleInRadians) + center.X,
radius * Math.Sin(angleInRadians) + center.Y);
child.Arrange(new Rect(childPosition, child.DesiredSize));
angleInRadians += angleIncrRadians;
}
}
return finalSize;
}
}
}
+1
这已经看起来像非常棒,谢谢!中心对我来说有点偏差(一半的项目大小),所以我更新了中心点的计算: 'var ch = Children.FirstOrDefault()。DesiredSize.Height; var cw = Children.FirstOrDefault()。DesiredSize.Width; ((finalSize.Width - cw)/ 2,(finalSize.Height - ch)/ 2);' – Thomas
你尝试过什么到目前为止,我敢肯定,你可以写一个面板UWP – Alex
我做的代码复制到我的项目,但很多的命名空间似乎是不同的,我不知道我会在哪里寻找正确的,或者如果这是正确的方法。 – Thomas
也许看看这篇文章http://www.codemag.com/article/1611061它具有一个形状为机场终端的列表......认为它可以适应一个圆圈而不是矩形 – Depechie