当前位置: 首页 > 编程语言 > C#

以编程方式将子项添加到stackpanel不起作用分享

时间:2023-04-10 14:26:26 C#

C#学习教程:以编程方式将子项添加到堆栈面板不起作用这是代码:StackPanelstackPanel=newStackPanel();stackPanel.Orientation=Orientation.Vertical;for(intindex=_elements.Count-1;index>=0;index--){FrameworkElement元素=_elements[index];WriteableBitmaptempBitmap=newWriteableBitmap(element,null);图片image=newImage();image.Source=tempBitmap;stackPanel.Children.Add(图片);}stackPanel.UpdateLayout();_bitmap=newWriteableBitmap(stackPanel,null);_bitmap.Invalidate();如您所见,我正在创建一个临时图像,然后将其添加到堆栈面板,然后创建一个最终的WriteableBitmap。堆叠板的第一个孩子的高度是154,第二个是389。在这一行之后:_bitmap.Invalidate();当我看到PixelHeight时它只有389。我的第一个孩子去哪儿了?虽然sLedgem和bathineni给出的答案都是正确的,但它似乎不适合我的情况。另外,为什么我要将它们添加到布局中?如果您方便的话,可以,但在我的例子中,我希望它们占用100%的内存,因为我的助手类基本上用于打印任何UIElement,而无需参考屏幕。在那种情况下,显然我不想将我的LayoutRoot或其他Panel传递给我的帮助程序类只是为了进行这种攻击!要求Silverlight运行时在内存中呈现元素。您需要调用measure和arrange:所以我通常缺少的是:stackPanel.Measure(newSize(width,height));stackPanel.Arrange(newRect(0,0,width,height));之前:_bitmap=newWriteableBitmap(stackPanel,null);我可以去掉这一行:stackPanel.UpdateLayout();希望这可以帮助来自该线程并且遇到像我这样的问题的人,在您的帮助程序类中找不到LayoutRoot是不可能的。stackPanel或任何其他面板在添加到visulatree(任何视觉元素)之前不会呈现。意思是..如果您已将100个项目添加到stackpanel,直到stackpanel在屏幕上具有视觉外观这100个元素才会生成。如果您不希望堆栈面板出现在屏幕上,请添加堆栈面板并立即将其删除。它将使stackpanel呈现它的子级...在XAML中创建一个高度和宽度为1像素的网格或stackpanel,然后将您的stackpanel添加到该网格或stackpanel...所以它不会显示在屏幕上,并将在背景上呈现....bathineni是对的,您需要在拍摄快照之前呈现堆栈窗格。我建议让它渲染一个框架,然后在渲染后抓取位图以上是C#学习教程:以编程方式将子级添加到堆栈面板不起作用如果它对你们有用并且需要了解更多信息,请分享整个内容关于C#学习教程,希望大家多多关注——CompositionTarget.Rendering+=CompositionTarget_Rendering;}voidCompositionTarget_Rendering(objectsender,EventArgse){_bitmap=newWriteableBitmap(stackPanel,null);_bitmap.Invalidate();不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: