WPF:创建动态创建的usercontrol的映像

时间:2010-09-03 07:22:20

标签: c# wpf

我想创建动态创建的用户控件的图像并在窗口中显示它。

我正在使用下面的代码创建usercontrol。

 MyViews.MyViewsUserControl myViewsCanvas = new MyViews.MyViewsUserControl(AllFoundationMyViewsViewModel,item.Id);
                        //myViewsCanvas.Height = 5;
                        //myViewsCanvas.Width = 5;
                        Size size = new Size(50, 50);
                        myViewsCanvas.Measure(size);
                        double width = myViewsCanvas.DesiredSize.Width;
                        double height = myViewsCanvas.DesiredSize.Height;
                        myViewsCanvas.Arrange(new Rect(new Point(), size));

然后我创建了myViewsCanvas的图像,并使用下面的代码将其添加到另一个名为_DashBoardUserControl的usercontrol的视图框中。

 _DashBoardUserControl.Viewbox2.Child = CreateImage(myViewsCanvas);

然后我将_DashBoardUserControl添加到窗口。

UserControls.Controls.PopupWindow popup = new UserControls.Controls.PopupWindow();
        popup.PopupContent = _DashBoardUserControl;
        popup.ShowDialog();

问题是,我只能看到图像的一部分。我想这是因为measure()和arrange()方法。任何人都可以告诉我这些方法或我应该传递给这些方法的大小。我需要缩小图像吗?如果是,我该怎么做?

1 个答案:

答案 0 :(得分:1)

我所知道的最简单的方法是:

Viewbox v = new Viewbox();
v.Child = uielem;
uielem.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
v.Measure(uielem.DesiredSize);
v.Arrange(new Rect(new Point(), uielem.DesiredSize));
v.UpdateLayout();
r.Render(v);

其中uielem是您要渲染的元素,r是RenderTargetBitmap。 (v.UpdateLayout可能不需要那里,但我不确定了。)

相关问题