2014-04-07 96 views
1

想知道是否有办法将圆形控件安排成圆形的形状。控制可以是图像或文本框。例如:如果我有一个椭圆形状,所有我期望的是沿着椭圆的周边边界填充控件。请让我知道是否有办法使用xaml和c#来做到这一点。这是我迄今为止所做的。我创建了一个矩形,并使用点类型具有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方向上添加控件...椭圆也可以由Rectangle替换。这些控件正在添加,但是它们只会被添加到只有一列之中。

<StackPanel x:Name="SpTable1"> 
+0

使用的画布。所以你可以放置指定x,y坐标 – voddy

+0

的项目,我用Canvas替换了stackpanel,它工作。至少我现在可以看到一些圆圈形状。 – user3504925

回答

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); 
     } 

希望这有助于

+0

控件像堆栈一样对齐,而不是像圆圈一样。没有Controls Type.Add()。我需要将它们添加到面板。相反,我们需要为winrt-xaml使用children.add()。 – user3504925

+0

它们可能因为单元类型而堆叠,我使用了像素,但是您应该提高半径以满足您的任何需要。 –