Проблема RenderTargetBitmap - PullRequest
       0

Проблема RenderTargetBitmap

0 голосов
/ 31 августа 2010

Я пытаюсь добавить изображение usercontrol в viewbox. Я создаю пользовательский контроль динамически. Я использую код ниже.

private static RenderTargetBitmap CaptureScreen(Visual target, double dpiX, double dpiY)
{
    if (target == null)
    {
        return null;
    }
    Rect bounds = VisualTreeHelper.GetDescendantBounds(target);
    //RenderTargetBitmap rtb = new RenderTargetBitmap((int)(bounds.Width * dpiX / 96.0),
    //                                                (int)(bounds.Height * dpiY / 96.0),
    //                                                dpiX,
    //                                                dpiY,
    //                                                PixelFormats.Pbgra32);
    RenderTargetBitmap rtb = new RenderTargetBitmap(596,596,dpiX,
                                                    dpiY,
                                                    PixelFormats.Pbgra32);
    DrawingVisual dv = new DrawingVisual();
    using (DrawingContext ctx = dv.RenderOpen())
    {
        VisualBrush vb = new VisualBrush(target);
        ctx.DrawRectangle(vb, null, new Rect(new Point(), bounds.Size));
    }
    rtb.Render(dv);
    return rtb;
}

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

UserControls.UserControl1 uc1 = new UserControls.UserControl1();
                        visualList.Add(uc1);
 for(int i = 0;i<=6;i++)
        {
            Image img = new Image();
            img.Source = CaptureScreen(visualList[i], 96, 96);
            img.Margin = new Thickness { Top = 2 };                   
            usingWorkaround.Children.Add(img);
        }

VisualTreeHelper.GetDescendantBounds (target) возвращает пустые границы. Вот почему изображение на экране не может быть создано. Есть ли другой метод для захвата экрана динамически создаваемого пользовательского элемента управления?

Ответы [ 2 ]

5 голосов
/ 23 октября 2013

Вы можете позвонить, измерить и расположить следующим образом

  private void ForceUpdate(FrameworkElement element, double width, double height)
  {
     Size size = new Size(width, height);

     element.Measure(size);

     element.Arrange(new Rect(0, 0, width, height));

     element.UpdateLayout();
  }
0 голосов
/ 31 августа 2010

В то время, когда вы пытаетесь создать изображение, элементы управления еще не существуют в визуальном дереве, и размер не был рассчитан.

Вам нужно будет вызвать Измерение и Расположите на вашем изображении первым.

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