我尝试OnRender在 custon 的覆盖方法中实现正确的行为Canvas。我面对神奇的数字 4 却找不到它的来源。
我的覆盖示例如下。喜欢的管理器m_<ManagerName>M是执行绘制逻辑的分离类。
public class MyCanvas : Canvas {
...
int m_counter = 0;
protected override void OnRender(DrawingContext dc)
{
m_counter++;
if (m_counter == 4 && Leasings != null)
{
m_counter = 0;
ClearManagers();
if (m_gridM != null)
{
var rowsI = Leasings.Select(l => l.RowIndex).Distinct();
foreach (var i in rowsI)
m_gridM.DrawRow(i, dc);
m_gridM.DrawColumns(DayCount, dc);
}
if (m_barM != null)
{
foreach (var bm in Leasings)
{
m_barM.DrawBar(bm, dc);
}
}
if (m_textM != null)
{
m_textM.Load(Leasings);
m_textM.DrawText(dc);
}
}
base.OnRender(dc);
}
...
}
问题是我不明白为什么这个方法在加载窗口时连续调用了 4 次(或者第一个操作是什么),并且在绑定数据被更改时调用了 3 或 2 次。
我只在第 4 次迭代中成功地进行了抽签。我不知道为什么并添加了带有第 4 次迭代条件的计数器。它工作正常。
当我尝试重绘时,我只收到了 3 次或有时 2 次OnRender. 所以绘制的条件不起作用,即使我在这种情况下改变它,数据也没有被绘制。
我的行为会触发该OnRender方法吗?OnLoad为什么在我尝试刷新数据时,最后一次调用时绘制成功并且没有发生(或可见)?