我想创建动态创建的用户控件的图像并在窗口中显示它。
我正在使用下面的代码创建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()方法。任何人都可以告诉我这些方法或我应该传递给这些方法的大小。我需要缩小图像吗?如果是,我该怎么做?
答案 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可能不需要那里,但我不确定了。)