UWP:显示列表视图项目排列在一个圆圈

问题描述:

我有一个ListView与< 12项绑定到它。我想将这些项目安排在一个圆圈中,同时仍然可以使用ListView功能(selectedItem等)。尽管如此,滚动并不是必需的。UWP:显示列表视图项目排列在一个圆圈

我发现了这个博客文章doing a similar thing in WPF,这可以重写为用于UWP吗?

+0

你尝试过什么到目前为止,我敢肯定,你可以写一个面板UWP – Alex

+0

我做的代码复制到我的项目,但很多的命名空间似乎是不同的,我不知道我会在哪里寻找正确的,或者如果这是正确的方法。 – Thomas

+0

也许看看这篇文章http://www.codemag.com/article/1611061它具有一个形状为机场终端的列表......认为它可以适应一个圆圈而不是矩形 – Depechie

您提供的链接应该在UW​​P中工作,并且这是正确的方法。你只需要更新命名空间为这样:

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