// UI Builders
        /// <summary> build the UI </summary>
        protected virtual void InitializeUI()
        {
            // Background Images
            BitmapImage[] backgroundImages = new BitmapImage[] {
                _cache.Cache("red.png"),
                _cache.Cache("blue.png")
            };

            // Add Cards and Handlers
            double leftMargin = 20.0;
            int backgroundCount = backgroundImages.Length;
            CardFlippedEventHandler flipHandler = new CardFlippedEventHandler(Card_Flipped);
            for (int i = 0; i < _numCards; ++i) {
                BitmapImage back = backgroundImages[i % backgroundCount];
                CardUserControl card = new CardUserControl(back);
                card.OnFlip += flipHandler;
                card.Margin = new Thickness(leftMargin, 0, 0, 0);
                card.HorizontalAlignment = HorizontalAlignment.Left;
                card.Tag = i;

                leftMargin += card.Width;
                grid.Children.Add(card);
                _cards.Add(card);
            }

            // Adjust Window size
            Width = leftMargin + 40.0;
            ResetUI();
        }
 /// <summary> handles a card being flipped. </summary>
 /// <param name="sender"> the card that was clicked </param>
 protected virtual void Card_Flipped(CardUserControl sender)
 {
     if (_isMyTurn) {
         _chooseCell.Value = (int)sender.Tag;
     }
 }