【问题标题】:How to drag and drop dynamically created controls如何拖放动态创建的控件
【发布时间】:2009-08-26 10:15:13
【问题描述】:
如何拖放动态创建的控件
我的代码如下所示
Button btnTask = new Button();
btnTask.Content = _myCustomTasks[iCtr].Description;
btnTask.Background = _myCustomTasks[iCtr].TaskColor;
stackPanel.Children.Add(btnTask);
我的要求是拖放这些动态创建的按钮控件。
提前致谢
【问题讨论】:
标签:
c#
silverlight
silverlight-2.0
【解决方案1】:
- 拖放到设计器中的控件不是动态创建的。它们是静态创建和重新创建的。在大多数情况下,这些控件都可以从工具箱中访问。
- 在后面的代码中声明的控件(例如您的 Button)是动态创建的。必须以编程方式创建和重新创建它们。这些控件是背后代码独有的。
但是,当使用动态创建的控件时,通常使用 PlaceHolders(此控件未呈现)来定位您的对象。
这样做...
- 将 PlaceHolder 拖放到您希望按钮所在的位置。 (设计师)。
- 以编程方式将您的按钮添加到 PlaceHolder。 (代码隐藏)
比如……
Button btnTask = new Button();
btnTask.Content = _myCustomTasks[iCtr].Description;
btnTask.Background = _myCustomTasks[iCtr].TaskColor;
PlaceHolder1.Controls.Add(btnTask);
希望对你有帮助...
【解决方案2】:
我对 Silverlight 中拖放的建议:
在常规布局“下方”定义 Canvas 布局(z 顺序)。
当您从常规布局(网格等)中选择要拖放的对象时,将对象移动到允许像素定位的底层 Canvas。将画布移动到当前布局的“上方”。
通过更新对象的 Canvas 位置来拖动对象。
完成拖动后,将对象返回到适当位置的常规布局(您可能必须在顶层布局中查找适当的连接点)。将画布层返回到比常规布局更低的 z 顺序。
这对于我需要的一个简单的拖放系统来说非常有效。
Telerik 控件还提供拖放框架。
-杰夫