private void AddItem(CharacterSheet.ItemWithDescription item)
        {
            if (item == null)
            {
                return;
            }
            var sl = new StackLayout()
            {
                Orientation = StackOrientation.Horizontal,
            };
            var up    = AddButton("Up");
            var down  = AddButton("Down");
            var frame = MainPage.CreateFrame(string.Empty);

            sl.Children.Add(up);
            sl.Children.Add(frame);
            sl.Children.Add(down);
            Items.Children.Add(sl);
            var cntrls = new Controls()
            {
                up   = up,
                text = frame.Content as Label,
                down = down,
            };

            controls.Add(cntrls);
            UpdateItem(cntrls, item);
        }
        private void UpdateItem(Controls controls, CharacterSheet.ItemWithDescription item)
        {
            var sheet = CharacterSheetStorage.Instance.selectedCharacter;

            if (sheet == null)
            {
                return;
            }
            MainPage.SetTapHandler(controls.up, () => MoveItem(item, -1, true));
            MainPage.AddTapHandler(controls.up, () => MoveItem(item, -1, false), 2);
            controls.text.Text = item.AsString(sheet);
            MainPage.SetTapHandler(controls.down, () => MoveItem(item, 1, true));
            MainPage.AddTapHandler(controls.down, () => MoveItem(item, 1, false), 2);
        }
        private void MoveItem(CharacterSheet.ItemWithDescription item, int dir, bool onePosition)
        {
            if (items == null)
            {
                return;
            }
            var index = items.IndexOf(item);

            if (index < 0)
            {
                return;
            }
            var newIndex = onePosition ? index + dir : (dir < 0 ? 0 : items.Count - 1);

            newIndex = Math.Min(Math.Max(0, newIndex), items.Count - 1);
            if (newIndex == index)
            {
                return;
            }
            items.Remove(item);
            items.Insert(newIndex, item);
            UpdateLabels();
        }