我想将项目添加到Dockpanel。我收到了作为对象的项目(例如图像,按钮等)。
如何将对象投射回原来的位置并添加到Dockpanel中?
我尝试过这样的事情
import vpython as vs
vs.ModelLearning(features, prices)
答案 0 :(得分:2)
您的代码的问题在于您不能简单地将object
添加到DockPanel.Children
,因为它是UIElementCollection
,这意味着您只能添加{{3} } s 。
因此,而不是
Dockpanel.Children.Add((T) Convert.ChangeType(obj, typeof(T)));
(不会编译),您需要将要添加的对象投射到UIElement
上,像这样:
DockPanel.Children.Add((UIElement) obj);
您需要注意的是,obj
实际上是UIElement
,例如Button
,Image
,TextBox
等,或强制转换到UIElement
的操作将失败。
使用辅助方法或类似的UIElement
public static void AddChild(this DockPanel dockPanel, T childToAdd) where T : UIElement
{
dockPanel.Children.Add(childToAdd);
}
具有易于使用且仅允许有效输入的优点,这要归功于通用约束where T : UIElement
,这意味着“要添加的内容必须来自UIElement
“ 。
然后您可以像这样调用方法:
this.MyDockPanel.AddChild(new Image());
this.MyDockPanel.AddChild(new Button());
OP已经阐明了他们的实际要求,即
我在对象数组中得到一个图像-我想将其投射回图像-然后我想将其添加到Dockpanel-相同的代码也可以与Buttons一起使用
这意味着我们要添加其中包含的所有项目
object[] myItems = ...
访问我们名为DockPanel
的{{1}}。
让我们利用上面的扩展方法,现在我们可以这样做:
myDockPanel
,瞧,我们已经完成了-无需强制转换为object[] myItems = ...;
foreach(object obj in myItems)
{
this.myDockPanel.AddChild(obj as UIElement);
}
,我们只需出于上述原因将其强制转换为Image
,并且该代码适用于UIElement
等。也是