static void OnDataGridRowSelected(object sender, RoutedEventArgs e)
        {
            if (!object.ReferenceEquals(sender, e.OriginalSource))
            {
                return;
            }
            DataGridRow item = e.OriginalSource as DataGridRow;

            if (item != null)
            {
                item.BringIntoView();
            }
        }
    static void OnDataGridRowSelected(object sender, RoutedEventArgs e)
    {
        // Only react to the Selected event raised by the TreeViewItem
        // whose IsSelected property was modified. Ignore all ancestors
        // who are merely reporting that a descendant's Selected fired.
        if (!Object.ReferenceEquals(sender, e.OriginalSource))
        {
            return;
        }
        DataGridRow item = e.OriginalSource as DataGridRow;

        if (item != null)
        {
            item.BringIntoView();
        }
    }
        private void DeckDragEnter(object sender, DragEventArgs e)
        {
            if (!e.Data.GetDataPresent("Card"))
            {
                e.Effects = DragDropEffects.None;
            }
            else
            {
                DataGridRow adornedRow = FindAncestor <DataGridRow>(e.OriginalSource as FrameworkElement); // used to place drop adorner
                DataGrid    grid       = (DataGrid)FindAncestor <Expander>(e.OriginalSource as FrameworkElement).Content;

                if (e.Effects == DragDropEffects.Copy)
                {
                    Expander          exp         = FindAncestor <Expander>(sender as FrameworkElement);
                    ObservableSection dropSection = (ObservableSection)((FrameworkElement)exp).DataContext;
                    var dragCard = e.Data.GetData("Card") as IMultiCard;
                    var element  = dropSection.Cards.FirstOrDefault(c => c.Id == dragCard.Id);
                    if (element != null) //i.e. card already in section
                    {
                        // Highlight the existing card
                        adornedRow = grid.ItemContainerGenerator.ContainerFromIndex(grid.Items.IndexOf(element)) as DataGridRow; // Move adorner to existing card
                        adornedRow.BringIntoView();
                        ShowAdorner(adornedRow, true);
                    }
                    else
                    {
                        e.Effects = DragDropEffects.All;
                    }
                }
                if (e.Effects == DragDropEffects.All)
                {
                    if (adornedRow != null && grid.Items.SortDescriptions.Count == 0)
                    {
                        ShowAdorner(adornedRow, false);
                    }
                    else if (grid != null)
                    {
                        ShowAdorner(grid, true);
                    }
                }
            }
        }