永发信息网

WPF 如何刷新 Canvas

答案:2  悬赏:30  手机版
解决时间 2021-04-04 06:24
  • 提问者网友:箛茗
  • 2021-04-03 18:33
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
}));
}
最佳答案
  • 五星知识达人网友:你哪知我潦倒为你
  • 2021-04-03 19:02
看了你的代码只是涉及到控件位置和大小的改变,没有其他精确的计算,那为何还要canvas这种绝对定位的容器?建议说说你的需求,并重新设计构架。
全部回答
  • 1楼网友:千杯敬自由
  • 2021-04-03 20:10
如果是需要用brush进行erase那么用system.windows.controls.inkcanvaseditingmode.erasebystroke 如果是希望clear的话,用strokes.clear即可 strokes是指和`inkcanvas binding`的对象 <inkcanvas strokes="{binding strokes}" ... />
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯