2010-09-03 112 views
1

我想创建一个动态创建的用户控件的图像并在窗口中显示它。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另一个用户控件的视图框。

_DashBoardUserControl.Viewbox2.Child = CreateImage(myViewsCanvas); 

然后,我将_DashBoardUserControl添加到窗口。

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

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

回答

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可能不需要那里,但我不知道了)。

+0

谢谢你。它帮助了很多。 – user435588 2010-09-07 03:53:59