Silverlight Datagrid: выделить всю колонку? - PullRequest
0 голосов
/ 13 мая 2010

У меня есть DataGrid в моем приложении Silverlight, и я хотел бы «выделить» весь столбец, когда выбрана любая ячейка в этом столбце.

Например, с учетом этой сетки (где "[ ]" представляет ячейку):

[     ][     ][     ]
[     ][     ][     ]
[     ][     ][     ]

Если я выберу ячейку, как это

[     ][ selected ][     ]
[     ][          ][     ]
[     ][          ][     ]

Я бы хотел, чтобы все ячейки в этом столбце, включая выбранную ячейку, были "выделены" (это может быть так же просто, как просто изменить цвет фона):

[     ][  selected   ][     ]
[     ][ highlighted ][     ]
[     ][ highlighted ][     ]

Есть ли простой способ сделать это? Спасибо!

1 Ответ

1 голос
/ 17 мая 2010

Вот начало поведения, которое должно направить вас в правильном направлении

    public class DataGridHighlightBehavior : Behavior<DataGrid>
{
    protected override void OnAttached()
    {
        base.OnAttached();

        AssociatedObject.CurrentCellChanged += AssociatedObject_CurrentCellChanged;
    }

    void AssociatedObject_CurrentCellChanged(object sender, EventArgs e)
    {
        foreach (object i in AssociatedObject.ItemsSource)
        {
            var item = AssociatedObject.CurrentColumn.GetCellContent(i);
            if (item == null)
                return;
            var parent = GetParent<DataGridCell>(item);
            if (parent != null)
                parent.Background = new SolidColorBrush(Colors.Red);
        }
    }

    public static T GetParent<T>(DependencyObject source)
            where T : DependencyObject
    {
        DependencyObject parent = VisualTreeHelper.GetParent(source);
        while (parent != null && !typeof(T).IsAssignableFrom(parent.GetType()))
        {
            parent = VisualTreeHelper.GetParent(parent);
        }
        return (T)parent;
    }
}

Вам нужно будет добавить код, чтобы вернуть старые ячейки в их нормальное состояние. Моей первоначальной мыслью было изменить их текущее визуальное состояние, чтобы они отображали выбранные, но не мог вспомнить, как (если вы можете) сделать это извне класса.

...