TCM*_*TCM 6 c# silverlight silverlight-4.0
任何人都可以发现我正在做的错误吗?
这是代码:
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();
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我正在创建一个临时Image,然后将其添加到stackpanel,然后创建一个最终的WriteableBitmap.堆叠板的第一个孩子的身高是154,第二个是389.这一行之后:
_bitmap.Invalidate();
Run Code Online (Sandbox Code Playgroud)
当我看到PixelHeight时它只有389.我的第一个孩子去了哪里?
虽然 sLedgem 和 Bathineni 给出的答案都是正确的,但它似乎不适合我的情况。另外为什么我想将它们添加到布局中?如果你方便的话,你可以,但就我而言,我希望它们位于 100% 内存中,因为我的帮助程序类基本上用于打印,没有对屏幕上存在的任何 UIElements 的任何引用。在这种情况下,显然我不想将我的 LayoutRoot 或其他一些面板传递给我的帮助器类只是为了进行此黑客攻击!
要求 Silverlight 运行时渲染内存中的元素。您需要调用 Measure 和 Arrange:
所以通常我所缺少的是:
stackPanel.Measure(new Size(width, height));
stackPanel.Arrange(new Rect(0, 0, width, height));
Run Code Online (Sandbox Code Playgroud)
前:
_bitmap = new WriteableBitmap(stackPanel, null);
Run Code Online (Sandbox Code Playgroud)
我可以摆脱这一行:
stackPanel.UpdateLayout();
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助那些来到这个线程并且有像我一样的问题的人,在你的帮助类中找到 LayoutRoot 是不可行的。
归档时间: |
|
查看次数: |
8477 次 |
最近记录: |