我正在创建一个Silverlight应用程序,我必须动态创建按钮。但是我需要将它们放在我点击的按钮周围,以生成其他按钮(图片here,按钮应该放在“测试项目”按钮周围的黑线上)
我不知道每次会生成多少个按钮,但我知道每个按钮的大小是静态的。我不太清楚如何做到这一点。目前我的按钮创建如下
foreach (Item a in itemList)
{
Button newButton = new Button();
newButton.Height = 50;
newButton.Width = 50;
newButton.Content = a.getName();
newButton.Click += new RoutedEventHandler(addedClick);
newButton.HorizontalAlignment = HorizontalAlignment.Left;
newButton.VerticalAlignment = VerticalAlignment.Top;
newButton.Margin = new Thickness(0, 0, 0, 0);
newButton.Style = (Style)Application.Current.Resources["RB"];
buttons.Add(newButton);
}
我最大的问题是我不太确定如何获得“测试项目”按钮的中心点。
编辑:好的,既然每个按钮都有一组坐标,我该如何放置它们呢?我不确定如何使用画布。我尝试设置一个,但它一直表现得像一个stackpanel(没有.setLeft / .setTop)。答案 0 :(得分:3)
你的意思是圆圈方程:
Double distanceFromCenter = 5;
Double angleInDegrees = 90;
Double angleAsRadians = (angleInDegrees* Math.PI) / 180.0;
Double centerX = 100;
Double centerY = 100;
Double x = centerX + Math.Cos(angleAsRadians) * distanceFromCenter;
Double y = centerY + Math.Sin(angleAsRadians) * distanceFromCenter;
这应该给你一个distanceFromCenter
单位远离(centerX, center)
,在angle
90度的点。请注意,这仅适用于弧度,因此我们必须转换为弧度。
答案 1 :(得分:2)
var radius = 100;
var angle = 360 / itmeList.Count * Math.PI / 180.0f;
var center = new Point(100, 100);
for (int i = 0; i < itemList.Count; i++)
{
var x = center.X + Math.Cos(angle * i) * radius;
var y = center.Y + Math.Sin(angle * i) * radius;
Button newButton = new Button();
newButton.RenderTransformOrigin = new Point(x, y);
newButton.Height = 50;
newButton.Width = 50;
newButton.Content = a.getName();
newButton.Click += new RoutedEventHandler(addedClick);
newButton.HorizontalAlignment = HorizontalAlignment.Left;
newButton.VerticalAlignment = VerticalAlignment.Top;
newButton.Margin = new Thickness(0, 0, 0, 0);
newButton.Style = (Style)Application.Current.Resources["RB"];
buttons.Add(newButton);
}
答案 2 :(得分:1)
假设您希望按钮在圆上均匀分布,则应首先生成所需角度列表。 E.g。
double eachSection = 2 * Math.PI / count;
var anglesInRadians = Enumerable.Range(0, count).Select(x => x * eachSection);
然后使用此公式查找每个角度的x / y坐标,并使用Canvas
或其他东西将按钮定位在这些位置
public static Point PointOnCircle(double radius, double angleInRadians, Point origin)
{
double x = radius * Math.Cos(angleInRadians) + origin.X;
double y = radius * Math.Sin(angleInRadians) + origin.Y;
return new Point(x, y);
}