FrameworkElement.RemoveLogicalChild(Object) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
从此元素的逻辑树中删除所提供的对象。 FrameworkElement 将更新受影响的逻辑树父指针,以便与此删除操作保持同步。
protected public:
void RemoveLogicalChild(System::Object ^ child);
protected internal void RemoveLogicalChild (object child);
member this.RemoveLogicalChild : obj -> unit
Protected Friend Sub RemoveLogicalChild (child As Object)
参数
- child
- Object
要移除的元素。
示例
以下示例在 Child
执行自己的可视化层实现的自定义 FrameworkElement 上实现属性。 属性的 setter 设计为在值发生更改时,将从逻辑树以及特定于类的视觉集合中删除旧值。 缓存值,然后将新值添加到标准 WPF 框架级别逻辑树和自定义视觉对象集合。
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 或 setters、事件的类处理程序 Changed
、构造函数或集合类型本身中完成。
对于控件作者,建议不要在此级别操作逻辑树,除非所提供的基控件类的内容模型都不合适。 请考虑在 、 ItemsControl和 HeaderedItemsControl级别ContentControl进行子类化。 这些类通过专用 API 提供具有逻辑子级特定强制实施的内容模型,以及对 WPF 控件中通常所需的其他功能的支持,例如通过模板设置样式。