Adding children to stackpanel programmatically not working(以编程方式将子项添加到堆栈面板不起作用)
问题描述
有人能发现我正在做的错误吗?
代码如下:
StackPanel stackPanel = new StackPanel();
stackPanel.Orientation = Orientation.Vertical;
for (int index = _elements.Count - 1; index >= 0; index--)
{
FrameworkElement element = _elements[index];
WriteableBitmap tempBitmap = new WriteableBitmap(element, null);
Image image = new Image();
image.Source = tempBitmap;
stackPanel.Children.Add(image);
}
stackPanel.UpdateLayout();
_bitmap = new WriteableBitmap(stackPanel, null);
_bitmap.Invalidate();
如您所见,我正在创建一个临时图像,然后将其添加到Stackpanel,然后创建最终的WriteableBitmap。我的第一个孩子身高154,第二个孩子389。此行之后:
_bitmap.Invalidate();
当我看到PixelHeight时,它只有389。我的第一个孩子去哪里了?
推荐答案
虽然sLedgem和batineni给出的两个答案都是正确的,但似乎不适合我的情况。另外,我为什么要将它们添加到布局中?如果您方便的话,您可以,但在我的例子中,我希望它们在100%的内存中,因为我主要用于打印的助手类没有对屏幕上出现的任何UIElement的任何引用。在这种情况下,我显然不会想将我的LayoutRoot或其他面板传递给我的助手类,仅仅是为了进行黑客攻击!
请求Silverlight运行时在内存中呈现元素。您需要调用测量和安排:
所以通常我所缺少的就是:
stackPanel.Measure(new Size(width, height));
stackPanel.Arrange(new Rect(0, 0, width, height));
之前:
_bitmap = new WriteableBitmap(stackPanel, null);
我可以去掉这一行:
stackPanel.UpdateLayout();
希望这能帮助到和我一样遇到同样问题的人,在帮助器类中查找LayoutRoot是不可行的。
这篇关于以编程方式将子项添加到堆栈面板不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:以编程方式将子项添加到堆栈面板不起作用


基础教程推荐
- JSON.NET 中基于属性的类型解析 2022-01-01
- 首先创建代码,多对多,关联表中的附加字段 2022-01-01
- 从 VS 2017 .NET Core 项目的发布目录中排除文件 2022-01-01
- 将事件 TextChanged 分配给表单中的所有文本框 2022-01-01
- 全局 ASAX - 获取服务器名称 2022-01-01
- 在 VS2010 中的 Post Build 事件中将 bin 文件复制到物 2022-01-01
- 错误“此流不支持搜索操作"在 C# 中 2022-01-01
- 经典 Asp 中的 ResolveUrl/Url.Content 等效项 2022-01-01
- 如何动态获取文本框中datagridview列的总和 2022-01-01
- 是否可以在 asp classic 和 asp.net 之间共享会话状态 2022-01-01