示例#1
0
        private void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (e == null)
            {
                return;
            }

            var previousCol = _SelectedCascade;

            _SelectedCascade = (sender as DataTemplates.CascadeComponentXaml)?.Column ?? -1;
            ICard top = (_SelectedCascade >= 0) ? _Cards[_SelectedCascade].LastOrDefault() : CardEx.Empty; // card available to play of cascade (visually on bottom but called top)

            ICard previous = null;

            foreach (var c in _Cards?.SelectMany(z => z)?.Where(z => z.Selected))
            {
                //if (c.Selected) previous = c;
                c.Selected = false;
            }
            previous = _SelectedCard;

            var current = e.CurrentSelection.FirstOrDefault() as ICard;

            if ((current != null) && (top == current))   // only allow top card in cascade to be selected
            {
                current.Selected = true;
            }

            if (previous == CardEx.Empty)
            {
                this.BackgroundColor = Color.Gray;                           // nothing previously selected
            }
            else if (previous == current)
            {
                this.BackgroundColor = Color.Gray;                           // same card
            }
            else if (previous.CanBePlacedOnSingle(current))
            {
                this.BackgroundColor = Color.Green;                                             // move is valid
            }
            else
            {
                this.BackgroundColor = Color.Yellow;  // invalid move
            }
            _SelectedCard = current;

            RefreshView();
        }