FrameworkElement.AddLogicalChild(Object) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
将提供的对象添加到此元素的逻辑树。
protected public:
void AddLogicalChild(System::Object ^ child);
protected internal void AddLogicalChild (object child);
member this.AddLogicalChild : obj -> unit
Protected Friend Sub AddLogicalChild (child As Object)
参数
- child
- Object
要添加的子元素。
示例
以下示例在 Child
执行其自己的视觉层实现的自定义 FrameworkElement 上实现属性。 属性集旨在使值发生更改时,将从逻辑树中删除旧值,以及特定于类的视觉对象集合。 将缓存属性值,然后将新值添加到逻辑树和自定义视觉对象集合。
public virtual UIElement Child
{
get
{
return _child;
}
set
{
if (_child != value)
{
//need to remove old element from logical tree
if (_child != null)
{
OnDetachChild(_child);
RemoveLogicalChild(_child);
}
_vc.Clear();
if (value != null)
{
//add to visual
_vc.Add(value);
//add to logical
AddLogicalChild(value);
}
//always add the overlay child back into the visual tree if its set
if (_overlayVisual != null)
_vc.Add(_overlayVisual);
//cache the new child
_child = value;
//notify derived types of the new child
if (value != null)
OnAttachChild(_child);
InvalidateMeasure();
}
}
}
<System.ComponentModel.DefaultValue(GetType(Object), Nothing)>
Public Overridable Property Child() As UIElement
Get
Return _child
End Get
Set(ByVal value As UIElement)
If _child IsNot value Then
'need to remove old element from logical tree
If _child IsNot Nothing Then
OnDetachChild(_child)
RemoveLogicalChild(_child)
End If
_vc.Clear()
If value IsNot Nothing Then
'add to visual
_vc.Add(value)
'add to logical
AddLogicalChild(value)
End If
'always add the overlay child back into the visual tree if its set
If _overlayVisual IsNot Nothing Then
_vc.Add(_overlayVisual)
End If
'cache the new child
_child = value
'notify derived types of the new child
If value IsNot Nothing Then
OnAttachChild(_child)
End If
InvalidateMeasure()
End If
End Set
End Property
注解
使用此方法实现表示元素的逻辑子元素的对象上的集合。 子元素集合的集合维护可以在属性 getter 或 setter、Changed 事件、构造函数的类处理或集合类型本身中进行。
对于控制作者,除非没有可用于基本控件类的内容模型适合你的控制方案,否则在此级别操作逻辑树并不是建议的做法。 考虑子类的级别 ContentControl, ItemsControl以及 HeaderedItemsControl。 这些类通过专用 API 提供具有特定强制实施逻辑树子元素的内容模型,以及对 WPF 控件中通常所需的其他功能的支持,例如通过模板进行样式设置。 有关如何使用 LogicalChildren 和 AddLogicalChild查看 WPF 中的树的详细信息。
AddLogicalChild 如果在逻辑树被另一个进程迭代时调用,可能会引发异常。