0

我尝试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为什么在我尝试刷新数据时,最后一次调用时绘制成功并且没有发生(或可见)?

4

0 回答 0