private static void ClearCellVisualState( Cell cell )
    {
      if( cell == null )
        return;

      ContextMenu contextMenu = cell.ContextMenu;

      // Ensure to close the ContextMenu if it is open and the Cell
      // is virtualized to avoid problems with ContextMenus
      // defined as static resources that won't be able to reopen
      // again if the Close private method is called after the 
      // PlacementTarget is removed from the VisualTree
      if( ( contextMenu != null ) && ( contextMenu.IsOpen ) )
      {
        contextMenu.IsOpen = false;
      }

      cell.ClearContainerVisualState();
    }