Devi usare la proprietà di indice Z, e perché non ci sono costruito -in funzione di fare quello che vuoi, ho fatto il mio. Più alto è il valore Z, più vicino è il "più vicino" al controllo. Quindi vuoi mettere il tuo controllo in cima senza dover impostare un valore Z arbitrario alto.
Quindi ecco una piccola funzione che ho scritto per fare esattamente questo. Nota: questo presuppone che si stia utilizzando una Canvas e UserControls. Quindi potrebbe essere necessario adattarlo un po 'se non è il tuo caso.
Fondamentalmente otterrà l'indice del controllo da spostare, quindi qualsiasi controllo attualmente sopra verrà abbassato di 1 e il controllo da spostare verrà messo in primo piano (per mantenere la gerarchia).
static public void BringToFront(Canvas pParent, UserControl pToMove)
{
try
{
int currentIndex = Canvas.GetZIndex(pToMove);
int zIndex = 0;
int maxZ = 0;
UserControl child;
for (int i = 0; i < pParent.Children.Count; i++)
{
if (pParent.Children[i] is UserControl &&
pParent.Children[i] != pToMove)
{
child = pParent.Children[i] as UserControl;
zIndex = Canvas.GetZIndex(child);
maxZ = Math.Max(maxZ, zIndex);
if (zIndex > currentIndex)
{
Canvas.SetZIndex(child, zIndex - 1);
}
}
}
Canvas.SetZIndex(pToMove, maxZ);
}
catch (Exception ex)
{
}
}
fonte
2014-06-09 13:07:22
la domanda non riguardava il cambio dell'ordine, ma portare in primo piano, che sicuramente consiste nel fondare il maxOrder esistente e nell'impostare un ordine più grande ... – serhio