Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Bár a legtöbb esetben nem szükséges, a speciális vezérlőknek lehetőségük van felülbírálni a logikai fát.
példa
Ez a példa bemutatja, hogyan lehet alosztályozni a(z) StackPanel-t a logikai fa felülbírálásához, hogy ebben az esetben egy olyan viselkedést kényszerítsünk ki, amely szerint a panel csakis egyetlen gyermekelemet tartalmazhat és jeleníthet meg. Ez nem feltétlenül egy gyakorlatilag kívánatos viselkedés, de itt az elem normál logikai fájának felülbírálására szolgáló forgatókönyv szemléltetésének eszközeként jelenik meg.
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();
}
}
}
További információ a logikai fáról az alábbi hivatkozásnál található: Fák a WPF.
.NET Desktop feedback