Nasıl yapılır: Mantıksal Ağacı Geçersiz Kılma
Çoğu durumda gerekli olmasa da, gelişmiş denetim yazarlarının mantıksal ağacı geçersiz kılma seçeneği vardır.
Örnek
Bu örnek, panelin sadece tek bir alt öğeye sahip olmasına ve yalnızca bu alt öğeyi işlemeye zorlayan bir davranışı uygulamak için mantıksal ağacı değiştirmek amacıyla StackPanel üzerinde nasıl alt sınıf oluşturulacağını açıklar. Bu, pratikte istenen bir davranış olmayabilir, ancak burada bir öğenin normal mantıksal ağacını geçersiz kılma senaryoyu göstermenin bir yolu olarak gösterilir.
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();
}
}
}
Mantıksal ağaç hakkında daha fazla bilgi için bkz. WPF
GitHub'da bizimle işbirliği yapın
Bu içeriğin kaynağı GitHub'da bulunabilir; burada ayrıca sorunları ve çekme isteklerini oluşturup gözden geçirebilirsiniz. Daha fazla bilgi için katkıda bulunan kılavuzumuzu inceleyin.
.NET Desktop feedback