我正在尝试实现在运行时制作的布局。
布局将分为2、3、4、...
例如,有一个带有 1 个图像的大盒子。
如果我拖放图像,它将被分成两部分。
喜欢A => A | B or B | A
如果我拖放另一个图像,它将是
A | | B
A | B => --| B or A | --
C | | C
简单的提示会很棒。
这个想法到目前为止很简单。让我们说清楚。首先,根堆栈面板假设它是 A,将Orientation="Horizontal"
如下所示:
StackPanel A = new StackPanel();
A.Width = 300;
A.Height = 200;
A.Background = new SolidColorBrush(Colors.LightBlue);
A.Orientation = Orientation.Horizontal;
现在一旦我们有了 A,我们就知道它是根,每当我们向它添加一些东西时,它就会把它放在右边,这当然是你想要的 A | B 或更多 A | 乙| C. 现在,当您拖放图像检查时 -
图像的坐标来检测它悬停在哪个父布局上,然后检查它是否是一个 StackPanel( if(theLayout is StackPanel)
)
现在检查堆栈面板的方向。[PseudoCode]
-
if(Horizontal)
{
//Create a stackpanel with Vertical Orientation and place the image inside it
//stackpanel_with_v_orientation.Children.Add(yourImage)
//then add this stackpanel to theLayout like theLayout.Children.Add(stackpanel_with_v_orientation);
}
else
{
//its over some sub panels,which are ofcourse with vertical
//orientation.just add this up.
}
像这样!让我知道这是否有意义。
最后你想要一个这样的停靠控件:http: //avalondock.codeplex.com/
哇,你当然喜欢挑战!为此,您将需要创建一个相当复杂的自定义Panel
实现。在此Panel
,您将可以访问其中的子项(项目),Panel
因此您应该能够通过一些仔细的思考来实现您的要求。我可以为您提供一些有关该主题的教程的链接,但在那之后,您几乎可以靠自己了。
请查看这些链接中的文章以获得帮助: