我有一个 Silverlight DataGrid,其中包含一个显示用户控件的模板列。用户控件有一个进度条来表示处理,当处理完成时,动画会隐藏进度条并显示完成的标签。
在两种情况下,数据网格似乎不会重绘自身:
首先,当用户进行大量滚动时,数据网格将首先在用户控件进入视图时重绘动画,并最终达到不重绘任何内容的地步。
其次,用户控件中有一个显示弹出窗口的单击事件。当弹出窗口关闭时,用户控件再次无法正确重绘自身。
关于为什么会发生这种行为以及解决方法的任何想法?
我有一个 Silverlight DataGrid,其中包含一个显示用户控件的模板列。用户控件有一个进度条来表示处理,当处理完成时,动画会隐藏进度条并显示完成的标签。
在两种情况下,数据网格似乎不会重绘自身:
首先,当用户进行大量滚动时,数据网格将首先在用户控件进入视图时重绘动画,并最终达到不重绘任何内容的地步。
其次,用户控件中有一个显示弹出窗口的单击事件。当弹出窗口关闭时,用户控件再次无法正确重绘自身。
关于为什么会发生这种行为以及解决方法的任何想法?
前面的答案是正确的。我发现,如果您希望任何控件正常运行,有时您必须正确处理 Loading_Row 和 Unloading_Row 事件。在我的情况下,控件属性实际上绑定到一个对象才能发挥最佳效果。如果您尝试依赖动画和可见性等,您会看到奇怪的行为,但如果您将进度条绑定到一个在幕后维护每个项目进度的对象,那么每次显示该行时,它都会重新绑定并重绘。
您必须了解 DataGrid 没有为网格中的每一行提供一个控件实例。数据源可能有数百万行,而网格不需要更多的控件实例,而不需要在屏幕上显示。这意味着,例如,当您滚动时,它不会显示以前不可见的控件实例;它只是为当前可见的控件分配为当前滚动位置正确显示所需的任何值。
我不知道是否有解决方法。