WPF Canvas OnRender行为

时间:2018-10-09 12:44:08

标签: wpf canvas

我尝试在custon OnRender中被覆盖的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次迭代条件的计数器。很好。

当我尝试重绘时,OnRender仅收到3次呼叫,有时收到2次。因此,绘制条件不起作用,即使我针对这种情况进行了更改,数据也尚未绘制。

我的哪些动作会触发OnRender方法?为什么在尝试刷新数据时绘制在最后一次调用OnLoad上成功,却没有偶然发生(或不可见)?

0 个答案:

没有答案