【问题标题】:Arrange controls in circular/rectangular shape dynamically动态排列圆形/矩形形状的控件
【发布时间】:2014-04-07 01:36:51
【问题描述】:

只是想知道是否有一种方法可以将控件排列成圆形,例如圆桌。控件可以是图像或文本框。例如:如果我有一个椭圆形状,我只想沿着椭圆的周边填充控件。如果有使用 xaml 和 c# 的方法,请告诉我。这是我到目前为止所做的。我创建了一个矩形并使用 Point Type 获得 X、Y 位置值。基于这些点,我可以创建一个文本框..但不能循环,直到我再次达到 0,0。 0,0是左下位置(x,y)

for (int i = 0; i < count; i++)
        {
            TextBox tb = new TextBox();
            tb.Text = "Button " + i;
            Point p = new Point();
            p.X =  (int)(Math.Cos((double)i) * radius) + radius;
            p.Y = (int)(Math.Sin((double)i) * radius) + radius;
            Canvas.SetLeft(tb, p.X);
            Canvas.SetTop(tb, p.Y);
            SpTable.Children.Add(tb);
        }

同样需要在 Y 方向添加控件... Ellipse 也可以用 Rectangle 代替。控件正在添加,但它们仅被添加到彼此下方的一列中。

<StackPanel x:Name="SpTable1">

【问题讨论】:

  • 使用画布。所以你可以放置指定 x,y 坐标的项目
  • 我用 Canvas 替换了 stackpanel,它起作用了。至少我现在可以看到一些圆形。

标签: c# xaml windows-8 winrt-xaml


【解决方案1】:

您必须使用 cos 和 sin 计算文本框的位置。

这将创建 20 个以圆形图案排列的文本框。

        int radius = 200;

        for (int i = 1; i < 20; i++)
        {
            TextBox tb = new TextBox();

            tb.Left = (int)(Math.Cos((double)i) * radius) + radius;
            tb.Top = (int)(Math.Sin((double)i) * radius) + radius;

            this.Controls.Add(tb);
        }

希望对你有帮助

【讨论】:

  • 控件像堆栈而不是像圆圈一样对齐。没有控件 Type.Add()。我需要将它们添加到面板中。相反,我们需要对 winrt-xaml 使用 children.add()。
  • 它们可能是堆叠的,因为单位类型,我选择像素,但你应该根据需要提高半径。
猜你喜欢
  • 1970-01-01
  • 2017-08-25
  • 2020-04-29
  • 1970-01-01
  • 2021-03-14
  • 1970-01-01
  • 1970-01-01
  • 2014-09-07
  • 2021-01-14
相关资源
最近更新 更多