我正在C#中开发一个相对unique WPF Application
,我需要以编程方式安排my Buttons
(用户可以添加和删除按钮)在我的按钮旁边的香蕉状曲线中,如下所示:
我用StackPanel
尝试了它,但它总是呈矩形,我不知道如何编写算法来动态添加自定义大小的按钮。
tl;博士:任何人都可以帮我找出算法,以动态编程方式排列香蕉状曲线中的按钮吗?
谢谢!
答案 0 :(得分:2)
创建自己的Panel并使用指数函数将元素放在您想要的位置。这样的事情(没试过):
public class BananaPanel : Panel {
protected override Size MeasureOverride(Size availableSize) {
double totalX, totalY;
foreach (UIElement element in Children) {
element.Measure(availableSize);
totalX += element.DesiredSize.Width;
totalY += element.DesiredSize.Height;
}
return new Size(totalX, totalY);
}
protected override Size ArrangeOverride(Size finalSize) {
if(InternalChildren.Count == 0) return finalSize;
double maxValue = Math.Abs(InternalChildren.Count, 2);
double ratioX = finalSize.Width / maxValue;
double ratioY = finalSize.Height / maxValue;
for(int i=0; i<InternalChildren.Count; i++) {
UIElement element = InternalChildren[i];
Point p = new Point(Math.Pow(i, 2)*ratioX, Math.Pow(i, 2)*ratioY); //using square here, so it won't be banana-like, use an exponential function
element.Arrange(new Rect(p, element.DesiredSize));
}
return finalSize;
}
}
在您的XAML中:
<ItemsControl ItemsSource="{Binding YourBananaItems, Mode=OneWay}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<local:BananaPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
答案 1 :(得分:0)
我根据您的需要对其进行了定制。
你需要的只是一个画布(在我的情况下是(curYear + (int(100) - age))
)
sc