我在ScrollViewer中有一个自定义的TreeView(我需要覆盖此应用程序的模板)。
treeviewitems有两列。一个用于togglebutton,另一个用于内容。切换按钮列宽已设置为0以隐藏切换按钮并对齐所有元素。项目数据模板包含一个画布,该画布为每个项目绘制一个矩形,在水平方向上可以很长,并且与画布有一个左偏移。
这一切都正确绘制,但是当您双击矩形以展开子项时,scrollviewer会将树视图重新调整到左侧。我认为它是重新聚焦的,因为它与切换按钮或项目内容的左侧重新对齐。
有没有人有任何想法如何改变这种行为?
答案 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;
}
}