2010-09-03 4 views
1

Я хочу создать образ динамически созданного usercontrol и показать его в окне.WPF: создание образа динамически созданного usercontrol

Я создаю 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 и добавить его в поле зрения другого UserControl под названием _DashBoardUserControl используя код ниже.

_DashBoardUserControl.Viewbox2.Child = CreateImage(myViewsCanvas); 

Затем я добавляю _DashBoardUserControl к окну.

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

Проблема в том, что я могу видеть только часть изображения. Я думаю, это из-за методов measure() и arr(). Может кто-нибудь рассказать мне об этих методах или о том, какой размер я должен передать этим методам. Нужно ли масштабировать изображение? Если да, то как я это делаю?

ответ

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

Смежные вопросы