逻辑树:
逻辑树描述的是用户界面元素之间的关系,它主要负责:
- 传承依赖属性的值
- 设定动态资源的引用
- 为绑定查询元素的名称
- 传递路由事件
视图树:
视图树包括每一个逻辑元素的模板中的所有视图元素。它的责任是:
- 显示视图元素
- 设定元素的透明度
- 设定元素的布局和渲染变化
- 设定元素的可用(IsEnable)属性
- 做命中测试
- 关联资源(寻根)
Panel类的Childrend属性的类型是UIElementCollection
Panel类暴露了一个类型为UIElement的公有属性“Children”。Panel类重写了VisualChildrenCount属性和GetVisualChild()方法,将Children集合中的成员作为它的可视子元素返回。Panel也使用重写的GetVisualChild()方法为Children集合中的成员提供z-ordering。
public abstract class Panel : FrameworkElement, IAddChild
{
......
private UIElementCollection _uiElementCollection;
......
protected internal UIElementCollection InternalChildren
{
get
{
this.VerifyBoundState();
if (this.IsItemsHost)
{
this.EnsureGenerator();
}
else if (this._uiElementCollection == null)
{
this.EnsureEmptyChildren(this);
}
return this._uiElementCollection;
}
}
......
protected override int VisualChildrenCount
{
get
{
if (this._uiElementCollection == null)
{
return 0;
}
return this._uiElementCollection.Count;
}
}
protected override Visual GetVisualChild(int index)
{
if