2010-09-03 111 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