30 setembro 2009

WPF - Onde é que estou

Em determinadas situações. é importante saber onde se está.

O código abaixo, não sei de onde retirei, permite encontrar determinado parent. Neste caso, talvez a primeira vez seja importante colocar como o parent a ser encontrado a Window, e mandar para uma caixa os resultados da "VisualTreeHelperExtensions". É assim possível saber onde queremos parar.

Na situação descrita abaixo, encontrava-me num UserControl, inserido numa tab do TabControl. Pretendia-se fechar essa tab com um botão, mas era necessário saber o item da TabControl para remover. Sendo assim, define-se como o parent a descobrir o < TabControl > e removeu-se a tab.

var tc = VisualTreeHelperExtensions.FindAncestor< TabControl>(this);
TabItem ti = (TabItem)tc.Items[tc.SelectedIndex];
tc.Items.Remove(ti);

public static class VisualTreeHelperExtensions
{
public static T FindAncestor< T>(DependencyObject dependencyObject)
where T : class
{
DependencyObject target = dependencyObject;
do
{
target = VisualTreeHelper.GetParent(target);
//MessageBox.Show(target.ToString());
}
while (target != null && !(target is T));
return target as T;
}
}

É simples, mas olha, não sabia, sei agora...

Sem comentários: