private UIElement GenerateContainer(
      ICustomItemContainerGenerator generator,
      int index,
      bool measureInvalidated,
      bool delayDataContext )
    {
      bool isNewlyRealized;
      UIElement container = ( UIElement )generator.GenerateNext( out isNewlyRealized );

      if( container != null )
      {
        if( isNewlyRealized )
        {
          if( !this.Children.Contains( container ) )
          {
            this.Children.Add( container );
          }

          this.EnableElementNavigation( container );
          KeyboardNavigation.SetTabIndex( container, index );
        }

        this.HandleGeneratedContainerPreparation( container, index, isNewlyRealized, delayDataContext );

        if( ( isNewlyRealized ) || ( measureInvalidated ) )
        {
          this.MeasureContainer( container );
        }
      }

      return container;
    }
    private UIElement GenerateContainer( ICustomItemContainerGenerator generator, int index, bool forceMeasure )
    {
      bool isNewlyRealized;
      var container = ( UIElement )generator.GenerateNext( out isNewlyRealized );
      if( container == null )
        return null;

      if( isNewlyRealized )
      {
        var collection = this.Children;
        if( !collection.Contains( container ) )
        {
          collection.Add( container );
        }

        this.EnableElementNavigation( container );
        KeyboardNavigation.SetTabIndex( container, index );
        this.PrepareContainer( container );
        this.MeasureContainer( container );
      }
      else if( forceMeasure )
      {
        this.MeasureContainer( container );
      }

      return container;
    }