WPF: создание образа динамически создаваемого usercontrol - PullRequest
1 голос
/ 03 сентября 2010

Я хочу создать изображение динамически создаваемого пользовательского элемента управления и показать его в окне.

Я создаю 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 () иrange ().Кто-нибудь может рассказать мне об этих методах или какой размер я должен передать эти методы.Нужно ли уменьшать изображение?Если да, то как мне это сделать?

1 Ответ

1 голос
/ 03 сентября 2010

Самый простой способ, которым я знаю, это:

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 там может и не понадобиться, но я больше не уверен).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...