Freigeben über


Gewusst wie: Überschreiben der logischen Struktur

Aktualisiert: November 2007

Erfahrene Autoren von Steuerelementen können die logische Struktur überschreiben, auch wenn dies in den meisten Fällen nicht erforderlich ist.

Beispiel

In diesem Beispiel wird erläutert, wie Unterklassen des StackPanel gebildet werden, um die logische Struktur zu überschreiben. In diesem Fall wird ein spezielles Verhalten des Bereichs erzwungen, und es wird ein einzelnes untergeordnetes Element gerendert. Dieses Verhalten ist in der Praxis nicht wirklich wünschenswert. Es wird hier lediglich verwendet, um das Szenario für die Überschreibung der gewohnten logischen Struktur eines Elements zu veranschaulichen.

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();}
    }
}

Das vollständige Beispiel finden Sie unter Beispiel für das Überschreiben der logischen Struktur. Weitere Informationen über die logische Struktur finden Sie unter Strukturen in WPF.