Предотвратить повторную фокусировку прокрутки влево после развертывания дочернего элемента в виде дерева - PullRequest
0 голосов
/ 03 июня 2011

У меня есть настроенный TreeView внутри ScrollViewer (мне нужно было перезаписать шаблон для этого приложения).

Древовидные элементы имеют два столбца.Один для переключателя, а другой для содержимого.Ширина столбца переключателя была установлена ​​на 0, чтобы скрыть кнопку переключения и выровнять все элементы.Шаблон данных элементов содержит холст, который рисует прямоугольник для каждого элемента, который может быть довольно длинным по горизонтали и имеет левое смещение от холста.

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

У кого-нибудь есть идеи, как изменить это поведение?

1 Ответ

0 голосов
/ 07 июня 2011

Что ж, я получил предложение от коллеги поймать событие.

Я перепробовал несколько разных событий и нашел то, которое всплывало до ScrollViewer.

Я поймал MouseDownсобытие в прямоугольнике, помеченное как обработанное и пройденное до event.Source.Parent, пока я не доберусь до элемента управления для расширения дочернего элемента.

Надеюсь, это поможет другим.

private void GanttBarMouseDown(object sender, MouseButtonEventArgs e)
    {
        var theVm = ((GanttItemViewModel) ((ContentPresenter) ((FrameworkElement) ((FrameworkElement) e.Source).Parent).TemplatedParent).Content);
        if (e.ClickCount == 1)
        {
            theVm.IsSelected = true;
            e.Handled = true;
        }
        else
        {
            theVm.IsSelected = true;
            theVm.IsExpanded = theVm.IsExpanded ? false : true;
            e.Handled = true;
        }
    }
...