Пример #1
0
        protected override void RecycleElementCore(ElementFactoryRecycleArgs args)
        {
            var element = args.Element;
            var owner   = args.Parent;
            var key     = (String)(element as FrameworkElement).Tag;

            Debug.Assert(key != null);
            RecyclePool.PutElement((FrameworkElement)element, key, owner);


#if DEBUG
            var containerAsFE = (FrameworkElement)element;

            switch (key)
            {
            case RecipeGroupType:
            {
                var repeater = (ItemsRepeater)containerAsFE.FindName("groupLayout");
                var id       = RepeaterTestHooks.GetLayoutId(repeater.Layout);
                RepeaterTestHooks.SetLayoutId(repeater.Layout, id + "*");
                break;
            }

            case YearType:
            {
                var repeater = (ItemsRepeater)containerAsFE.FindName("yearLayout");
                var id       = RepeaterTestHooks.GetLayoutId(repeater.Layout);
                RepeaterTestHooks.SetLayoutId(repeater.Layout, id + "*");
                break;
            }
            }
#endif
        }
Пример #2
0
            protected override UIElement GetElementCore(ElementFactoryGetArgs args)
#endif
            {
                var key     = (args.Data is RecipeGroup) ? "Group" : "Recipe";
                var element = (FrameworkElement)_recyclePool.TryGetElement(key, args.Parent);

                if (element == null)
                {
                    if (args.Data is RecipeGroup)
                    {
                        element = (FrameworkElement)_groupTemplate.LoadContent();
                        _innerRepeaters.Add((ItemsRepeater)element.FindName("groupLayout"));
                    }
                    else
                    {
                        element = (FrameworkElement)_recipeTemplate.LoadContent();
                    }
                }

                element.Tag = key;

                if (args.Data is RecipeGroup)
                {
                    var group     = (RecipeGroup)args.Data;
                    var groupName = (TextBlock)element.FindName("groupName");
                    var repeater  = (ItemsRepeater)element.FindName("groupLayout");

                    groupName.Text = group.Name;
                    var dataSource = new DelegatingItemsSource(group);
                    dataSource.KeyFromIndexFunc = _KeyFromIndexFunc;
                    repeater.ItemsSource        = dataSource;
                    repeater.Layout             = IsInnerLayoutGrid ? (VirtualizingLayout) new UniformGridLayout()
                    {
                        MinItemWidth = 150, MinItemHeight = 150
                    } : (VirtualizingLayout) new StackLayout();
                    RepeaterTestHooks.SetLayoutId(repeater.Layout, group.Name);
                    repeater.ItemTemplate = this;
                    repeater.Animator     = _animator;
                }
                else
                {
                    var recipe      = (Recipe)args.Data;
                    var image       = (Image)element.FindName("recipeImage");
                    var description = (TextBlock)element.FindName("recipeDescription");

                    image.Source     = new BitmapImage(recipe.ImageUri);
                    description.Text = recipe.Description;
                }

                return(element);
            }
 public void UpdateInnerLayouts()
 {
     foreach (var repeater in _innerRepeaters)
     {
         if (repeater.Layout != null)
         {
             var id = RepeaterTestHooks.GetLayoutId(repeater.Layout);
             repeater.Layout = IsInnerLayoutGrid ? (VirtualizingLayout) new UniformGridLayout()
             {
                 MinItemWidth = 150, MinItemHeight = 150
             } : (VirtualizingLayout) new StackLayout();
             RepeaterTestHooks.SetLayoutId(repeater.Layout, id);
         }
     }
 }
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            _pageInfo = e.ExtraData as PageInfo;
            if (_pageInfo != null)
            {
                int levels       = _pageInfo.NumLevels;
                var level0Layout = _pageInfo.Level0Layout;
                var level1Layout = _pageInfo.Level1Layout;
                var level2Layout = _pageInfo.Level2Layout;
                var rnd          = new Random(12345);

                if (_pageInfo.Orientation == Orientation.Horizontal)
                {
                    scrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Disabled;
                    //scrollViewer.VerticalScrollMode = ScrollMode.Disabled;
                    //scrollViewer.HorizontalScrollMode = ScrollMode.Enabled;
                    scrollViewer.HorizontalScrollBarVisibility = ScrollBarVisibility.Visible;
                }

                var generator = _pageInfo.Orientation == Orientation.Vertical ?
                                new RecipeElementFactory(
                    (DataTemplate)Resources["RecipeTemplate"],
                    (DataTemplate)Resources["RecipeGroupTemplate"],
                    (DataTemplate)Resources["YearTemplate"], _pageInfo) :
                                new RecipeElementFactory(
                    (DataTemplate)Resources["RecipeTemplateHorizontal"],
                    (DataTemplate)Resources["RecipeGroupTemplateHorizontal"],
                    (DataTemplate)Resources["YearTemplateHorizontal"], _pageInfo);

                generator.RecyclePool     = new RecyclePool();
                rootRepeater.ItemTemplate = generator;
                rootRepeater.Layout       = _pageInfo.Level0Layout;
                RepeaterTestHooks.SetLayoutId(rootRepeater.Layout, "Root");

                switch (levels)
                {
                case 0:
                    _flatData = new ObservableCollection <Recipe>(Enumerable.Range(0, 300).Select(k =>
                                                                                                  new Recipe
                    {
                        ImageUri    = new Uri(string.Format("pack://application:,,,/Images/recipe{0}.png", k % 8 + 1)),
                        Description = k + " - " + _lorem.Substring(0, level0Layout is StackLayout ? rnd.Next(200, 650) : level0Layout is UniformGridLayout ? 0 : rnd.Next(10, 30))
                                      //Description = k.ToString()
                    }));
                    rootRepeater.ItemsSource = _flatData;
                    break;

                case 1:
                    _oneLevelNestedData = new ObservableCollection <RecipeGroup>(Enumerable.Range(0, 10).Select(j =>
                                                                                                                new RecipeGroup(
                                                                                                                    Enumerable.Range(0, rnd.Next(5, 16)).Select(k =>
                                                                                                                                                                new Recipe
                    {
                        ImageUri    = new Uri(string.Format("pack://application:,,,/Images/recipe{0}.png", k % 8 + 1)),
                        Description = string.Format("{0}.{1} - {2}", j, k, _lorem.Substring(0, level1Layout is StackLayout ? rnd.Next(200, 650) : level1Layout is UniformGridLayout ? 0 : rnd.Next(10, 30)))
                    }))
                    {
                        Name = "Group #" + j
                    }));
                    rootRepeater.ItemsSource = _oneLevelNestedData;
                    break;

                case 2:
                    _twoLevelNestedData = new ObservableCollection <Year>(Enumerable.Range(0, 3).Select(i => new Year(
                                                                                                            new ObservableCollection <RecipeGroup>(Enumerable.Range(0, rnd.Next(2, 5)).Select(j => new RecipeGroup(
                                                                                                                                                                                                  Enumerable.Range(0, rnd.Next(5, 16)).Select(k =>
                                                                                                                                                                                                                                              new Recipe
                    {
                        ImageUri    = new Uri(string.Format("pack://application:,,,/Images/recipe{0}.png", k % 8 + 1)),
                        Description = string.Format("{0}.{1}.{2} - {3}", 2016 - i, j, k, _lorem.Substring(0, level2Layout is StackLayout ? rnd.Next(200, 650) : level2Layout is UniformGridLayout ? 0 : rnd.Next(10, 30)))
                    }))
                    {
                        Name = "Group #" + j
                    })))
                    {
                        Value = 2016 - i
                    }));
                    rootRepeater.ItemsSource = _twoLevelNestedData;
                    break;
                }
            }
        }
Пример #5
0
        private void PrepareContainer(UIElement container, string containerType, object data)
        {
            var containerFE = container as FrameworkElement;

            switch (containerType)
            {
            case RecipeContainerType:
            {
                var recipe = (Recipe)data;

                var image       = (Image)containerFE.FindName("recipeImage");
                var description = (TextBlock)containerFE.FindName("recipeDescription");

                if (image.Source == null)
                {
                    image.Source = new BitmapImage(recipe.ImageUri);
                }
                else
                {
                    ((BitmapImage)image.Source).UriSource = recipe.ImageUri;
                }

                description.Text = recipe.Description;

                break;
            }

            case RecipeGroupType:
            {
                var group = (RecipeGroup)data;

                var groupName = (TextBlock)containerFE.FindName("groupName");
                var repeater  = (ItemsRepeater)containerFE.FindName("groupLayout");

                groupName.Text = group.Name;

                repeater.ItemsSource = group;
                repeater.Layout      = _pageInfo.NumLevels == 1 ? _pageInfo.Level1Layout : _pageInfo.Level2Layout;
#if DEBUG
                RepeaterTestHooks.SetLayoutId(repeater.Layout, group.Name);
#endif
                repeater.ItemTemplate = this;
                break;
            }

            case YearType:
            {
                var year = (Year)data;

                var yearName = (TextBlock)containerFE.FindName("yearName");
                var repeater = (ItemsRepeater)containerFE.FindName("yearLayout");

                yearName.Text = year.Value.ToString();

                repeater.ItemsSource = year;
                repeater.Layout      = _pageInfo.Level0Layout;
#if DEBUG
                RepeaterTestHooks.SetLayoutId(repeater.Layout, string.Format("Year {0}", year.Value));
#endif
                repeater.ItemTemplate = this;

                break;
            }
            }
        }