예제 #1
0
        public Size Measure(Size availableSize)
        {
            int startIdx, endIdx;

            // Figure out range that's visible based on layout algorithm
            getVisibleRange(availableSize, out startIdx, out endIdx);

            //Add and subtract CacheItemCount to StartIdx and EndIdx.
            _panel.UpdateCacheItemCount(ref startIdx, ref endIdx);

            //Generate new items and cleaup unused items.
            _panel.Generator.Generate(startIdx, endIdx);
            _panel.Generator.CleanUp(startIdx, endIdx);

            //Output extent so it can be accessed by PanelScrollHelper.
            Extent = calculateExtent(availableSize, _panel.getItemCount());

            //And return availableSize (take all available).
            return(availableSize);
        }
예제 #2
0
        /// <summary>
        /// Add and subtract CacheItemCount to StartIdx and EndIdx.
        /// </summary>
        /// <param name="panel"></param>
        /// <param name="startIdx"></param>
        /// <param name="endIdx"></param>
        public static void UpdateCacheItemCount(this IOCPanel panel,
                                                ref int startIdx, ref int endIdx)
        {
            //Add and subtract CacheItemCount to StartIdx and EndIdx.
            int itemCount = panel.getItemCount();

            startIdx -= panel.CacheItemCount;
            endIdx   += panel.CacheItemCount;
            if (startIdx < 0)
            {
                startIdx = 0;
            }
            if (endIdx > itemCount - 1)
            {
                endIdx = itemCount - 1;
            }
        }