HOW TO:覆寫邏輯樹狀結構
更新:2007 年 11 月
雖然這在大多數情況下並不需要,不過資深控制項作者可選擇覆寫邏輯樹狀結構。
範例
本範例說明如何使用子類別 StackPanel 來覆寫邏輯樹狀結構,在此例中,就是強制面板只能也只會呈現一個子項目的行為。這不一定是實際所需的行為,而只是為了示範如何覆寫項目的一般邏輯樹狀結構。
public class SingletonPanel : StackPanel
{
//private UIElementCollection _children;
private FrameworkElement _child;
public SingletonPanel() {
}
public FrameworkElement SingleChild
{
get { return _child;}
set
{
if (value==null) {
RemoveLogicalChild(_child);
} else {
if (_child==null) {
_child = value;
} else {
// raise an exception?
MessageBox.Show("Needs to be a single element");
}
}
}
}
public void SetSingleChild(object child)
{
this.AddLogicalChild(child);
}
public new void AddLogicalChild(object child)
{
_child = (FrameworkElement)child;
if (this.Children.Count == 1)
{
this.RemoveLogicalChild(this.Children[0]);
this.Children.Add((UIElement)child);
}
else
{
this.Children.Add((UIElement)child);
}
}
public new void RemoveLogicalChild(object child)
{
_child = null;
this.Children.Clear();
}
protected override IEnumerator LogicalChildren
{
get {
// cheat, make a list with one member and return the enumerator
ArrayList _list = new ArrayList();
_list.Add(_child);
return (IEnumerator) _list.GetEnumerator();}
}
}
若要檢視完整的範例,請參閱覆寫邏輯樹狀結構範例。如需邏輯樹狀結構的詳細資訊,請參閱 WPF 中的樹狀結構。