private void OnNeedPaint(object sender, NeedLayoutEventArgs e) { Debug.Assert(e != null); // Validate incoming reference if (e == null) { throw new ArgumentNullException(nameof(e)); } // Pass request onto the displaying control if we have one VisualContextMenu?.PerformNeedPaint(e.NeedLayout); }
/// <summary> /// Processes a notification from palette storage of a paint and optional layout required. /// </summary> /// <param name="sender">Source of notification.</param> /// <param name="e">An NeedLayoutEventArgs containing event data.</param> /// <exception cref="ArgumentNullException"></exception> protected virtual void OnNeedPaint(object sender, NeedLayoutEventArgs e) { Debug.Assert(e != null); // Validate incoming reference if (e == null) { throw new ArgumentNullException(nameof(e)); } // If required, layout the control if (e.NeedLayout && !_layoutDirty) { _layoutDirty = true; } if (IsHandleCreated && (!_refreshAll || !e.InvalidRect.IsEmpty)) { // Always request the repaint immediately if (e.InvalidRect.IsEmpty) { _refreshAll = true; Invalidate(); } else { Invalidate(e.InvalidRect); } // Do we need to use an Invoke to force repaint? if (!_refresh && EvalInvokePaint) { BeginInvoke(_refreshCall); } // A refresh is outstanding _refresh = true; } }
/// <summary> /// Processes a notification from palette storage of a paint and optional layout required. /// </summary> /// <param name="sender">Source of notification.</param> /// <param name="e">An NeedLayoutEventArgs containing event data.</param> /// <exception cref="ArgumentNullException"></exception> protected virtual void OnNeedPaint(object sender, NeedLayoutEventArgs e) { Debug.Assert(e != null); // Validate incoming reference if (e == null) { throw new ArgumentNullException(nameof(e)); } if (IsHandleCreated) { // Always request the repaint immediately if (e.InvalidRect.IsEmpty) { Invalidate(true); } else { Invalidate(e.InvalidRect, true); } } }