在树视图中展开子项后,防止scrollviewer重新聚焦到左侧

时间:2011-06-03 03:30:57

标签: wpf treeview scrollviewer

我在ScrollViewer中有一个自定义的TreeView(我需要覆盖此应用程序的模板)。

treeviewitems有两列。一个用于togglebutton,另一个用于内容。切换按钮列宽已设置为0以隐藏切换按钮并对齐所有元素。项目数据模板包含一个画布,该画布为每个项目绘制一个矩形,在水平方向上可以很长,并且与画布有一个左偏移。

这一切都正确绘制,但是当您双击矩形以展开子项时,scrollviewer会将树视图重新调整到左侧。我认为它是重新聚焦的,因为它与切换按钮或项目内容的左侧重新对齐。

有没有人有任何想法如何改变这种行为?

1 个答案:

答案 0 :(得分:0)

我从同事那里得到的建议是抓住这个事件。

我尝试了几个不同的事件,发现了一个冒泡到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;
        }
    }