共用方式為


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 中的樹狀結構