C# RenderTargetBitmap获取我的UserControl的空图像
我正在为WPF的每周计划工作。 我照顾好了一切,但我有个问题。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);
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();