WPF 如何刷新 Canvas
WPF页面上有个Canvas,里面有几个Textblock控件,当成模板用然后写个For循环对这个Canvas的大小和里面的控件进行赋值修改,代码如下:我的想法是,每次执...
WPF页面上有个Canvas,里面有几个Textblock控件,当成模板用
然后写个For循环对这个 Canvas 的大小和里面的控件进行赋值修改,代码如下:
我的想法是,每次执行循环执行修改 Canvas 样式,然后生成 Image 图片放进 图片序列 lstPrintImage 中,可现在的问题是循环执行到第几次获取到的图片都是 Canvas 被赋值前的样子,整个方法执行完之后 Canvas 显示最后一次循环的样式结果,求大师帮忙解Canvas即时生成刷新的问题啊~!!在线等~!!
for (int i = 0; i < lstPreviewCoupon.Count; i++)
{
SetCanvasStyle(lstPreviewCoupon[i]);
lstPrintImage.Add(GetPrintImage(cvPreview));
}
private void SetCanvasStyle(CouponData model)
{
Dispatcher.Invoke(new Action(() =>
{
#region 样式赋值
cvPreview.Width = DrawTool.MillimetersToPixels(Convert.ToDouble(previewTemplate.TEMPLATESIZE_X));
cvPreview.Height = DrawTool.MillimetersToPixels(Convert.ToDouble(previewTemplate.TEMPLATESIZE_Y));
//备注显示设置
lblPreviewCpnRemark.FontSize = Convert.ToDouble(previewTemplate.REMARKSIZE);
lblPreviewCpnRemark.FontFamily = new System.Windows.Media.FontFamily(previewTemplate.REMARKSTYLE);
string str = previewTemplate.TEMPLATEREMARK.Replace("\\n", "\n");
lblPreviewCpnRemark.Text = str;
#endregion
}));
} 展开
然后写个For循环对这个 Canvas 的大小和里面的控件进行赋值修改,代码如下:
我的想法是,每次执行循环执行修改 Canvas 样式,然后生成 Image 图片放进 图片序列 lstPrintImage 中,可现在的问题是循环执行到第几次获取到的图片都是 Canvas 被赋值前的样子,整个方法执行完之后 Canvas 显示最后一次循环的样式结果,求大师帮忙解Canvas即时生成刷新的问题啊~!!在线等~!!
for (int i = 0; i < lstPreviewCoupon.Count; i++)
{
SetCanvasStyle(lstPreviewCoupon[i]);
lstPrintImage.Add(GetPrintImage(cvPreview));
}
private void SetCanvasStyle(CouponData model)
{
Dispatcher.Invoke(new Action(() =>
{
#region 样式赋值
cvPreview.Width = DrawTool.MillimetersToPixels(Convert.ToDouble(previewTemplate.TEMPLATESIZE_X));
cvPreview.Height = DrawTool.MillimetersToPixels(Convert.ToDouble(previewTemplate.TEMPLATESIZE_Y));
//备注显示设置
lblPreviewCpnRemark.FontSize = Convert.ToDouble(previewTemplate.REMARKSIZE);
lblPreviewCpnRemark.FontFamily = new System.Windows.Media.FontFamily(previewTemplate.REMARKSTYLE);
string str = previewTemplate.TEMPLATEREMARK.Replace("\\n", "\n");
lblPreviewCpnRemark.Text = str;
#endregion
}));
} 展开
2个回答
展开全部
必然是这样的啊,C#对对象的使用本质上是引用,所以下面的语句:
lstPrintImage.Add(GetPrintImage(cvPreview));
for循环里一直改的是cvPreview对象的值,结果就是cvPreview只保存了最后一个cvPreview的更新。
解决方法:你应该new多个cvPreview对象,形成一个数组,最后循环打印这个数组。
lstPrintImage.Add(GetPrintImage(cvPreview));
for循环里一直改的是cvPreview对象的值,结果就是cvPreview只保存了最后一个cvPreview的更新。
解决方法:你应该new多个cvPreview对象,形成一个数组,最后循环打印这个数组。
追问
和你得分析有点出入,我for循环里是修改一次cvPreview对象就把他的生成图片保存好,我也分步骤跟踪了一下,循环生成的所有图片都是for循环开始之前的样子,最后代码都跑完以后,cvPreview对象变成了循环最后一次赋值的样子,这倒是真的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询