Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# RenderTargetBitmap获取我的UserControl的空图像_C#_Wpf_Rendertargetbitmap - Fatal编程技术网

C# RenderTargetBitmap获取我的UserControl的空图像

C# RenderTargetBitmap获取我的UserControl的空图像,c#,wpf,rendertargetbitmap,C#,Wpf,Rendertargetbitmap,我正在为WPF的每周计划工作。 我照顾好了一切,但我有个问题。 RenderTargetBitmap获取我的UserControl的空图像,我还尝试了元素.ApplyTmeplate()它对我不起作用 从数据库获取数据 private void Window_Loaded(object sender, RoutedEventArgs e) { sqlConnection = new SqlConnection(connectionString);

我正在为WPF的每周计划工作。 我照顾好了一切,但我有个问题。
RenderTargetBitmap
获取我的
UserControl
的空图像,我还尝试了
元素.ApplyTmeplate()它对我不起作用

从数据库获取数据

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        sqlConnection = new SqlConnection(connectionString);
        sqlConnection.Open();

        query = "SELECT dp.ID, d.DersAdi, a.Ad + ' ' + a.Soyad AS [Akademisyen], b.BolumAdi, dp.BaslangicSaati, dp.BitisSaati, g.GunAdi FROM DerslikProgrami dp INNER JOIN Dersler d ON d.ID = dp.DersID INNER JOIN Akademisyenler a ON a.ID = dp.AkademisyenID INNER JOIN Gunler g ON g.ID = dp.GunID INNER JOIN Derslikler dl ON dl.ID = dp.DerslikID INNER JOIN Bolumler b ON b.ID = dp.BolumID INNER JOIN Fakulteler f ON f.ID = b.FakulteID INNER JOIN Binalar bi ON bi.ID = dl.BinaID WHERE d.Sınıf = 1";
        sqlCommand = new SqlCommand(query, sqlConnection);
        dataRead = sqlCommand.ExecuteReader();
        while (dataRead.Read()) //Filling my scheduler with Task objects (Task is another usercontrol)
        {
            int ID = dataRead.GetInt32(0);
            string lesson = dataRead.GetString(1);
            string academician = dataRead.GetString(2);
            string department = dataRead.GetString(3);
            TimeSpan startTime = dataRead.GetTimeSpan(4);
            TimeSpan finishTime = dataRead.GetTimeSpan(5);
            string day = dataRead.GetString(6);
            string type = "Teorik";

            LessonTask lessonTask = new LessonTask()
            {
                ID = ID,
                Academician = academician,
                LessonName = lesson,
                LessonDay = day,
                LessonType = type,
                Department = department,
                StartTime = startTime,
                FinishTime = finishTime
            };
            LessonTask.LessonTasks.Add(lessonTask);

            Task task = new Task(lessonTask, this.pnlSchedulerSinif); //Usercontrol takes Lesson task for accessing data and takes the SchedulerPanel as a Parent.
            LessonTask.Tasks.Add(task);
        }

        foreach (Canvas cnv in pnlSchedulerSinif.pnlAna.Children.OfType<Canvas>())
        {
            foreach (Task t1 in cnv.Children.OfType<Task>())
            {
                foreach (Task t2 in cnv.Children.OfType<Task>())
                {
                    if (t1.ID != t2.ID)
                    {
                        if (t2.StartTime >= t1.StartTime && t2.StartTime <= t1.FinishTime)
                        {
                            Canvas.SetLeft(t2, 100);
                            t2.Width = 100;
                            Canvas.SetLeft(t1, 0);
                            t1.Width = 100;
                        }
                    }
                }
            }
        }

        sqlConnection.Close();

        //Taking image of my scheduler.
        RenderTargetBitmap rtb = new RenderTargetBitmap((int)pnlSchedulerSinif.Width, (int)pnlSchedulerSinif.Height, 96, 96, PixelFormats.Pbgra32);
        rtb.Render(pnlSchedulerSinif);

        PngBitmapEncoder png = new PngBitmapEncoder();
        png.Frames.Add(BitmapFrame.Create(rtb));
        MemoryStream stream = new MemoryStream();
        png.Save(stream);
        System.Drawing.Image image = System.Drawing.Image.FromStream(stream);
        image.Save(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\test.png", System.Drawing.Imaging.ImageFormat.Png);

    }
屏幕截图

由RenderTargetBitmap拍摄的空图像

编辑:回答后由RenderTargetBitmap拍摄的图像。
你所需要做的就是使用这种方法

element.UpdateLayout();
同时

element.ApplyTemplate();

当我处理这个问题时,他也不为我工作。我不知道,但我不知怎么找到了这个答案。

我也遇到了这个问题。你试过“element.UpdateLayout();”吗?没有,我要试一下。是的,成功了!你能给这篇文章加个答案吗?我可以接受。
element.ApplyTemplate();