Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Obwohl es in den meisten Fällen nicht erforderlich ist, haben Autoren von erweiterten Steuerelementen die Möglichkeit, die logische Struktur zu überschreiben.
Beispiel
In diesem Beispiel wird beschrieben, wie man StackPanel unterklassen kann, um die logische Struktur zu überschreiben, wobei in diesem Fall das Verhalten erzwungen wird, dass das Panel nur ein einzelnes untergeordnetes Element besitzen und nur dieses rendern darf. Dies ist nicht unbedingt ein praktisch wünschenswertes Verhalten, sondern hier als Mittel zur Veranschaulichung des Szenarios zum Überschreiben der normalen logischen Struktur eines Elements dargestellt.
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();
}
}
}
Weitere Informationen zur logischen Struktur finden Sie unter "Strukturen" in WPF.
.NET Desktop feedback