5

I have some controls added in a stackpanel programmatically. What i want to do is that i want one of the controls in this stackpanel to be placed over another control. Specifically, I want to place button over an image in this stack panel. I couldn't find zindex property in c# codebehind. Although it seems very simple problem but i am unable to find any clue to solve this problem. Anyone please......??

Faran Shabbir
  • 423
  • 1
  • 6
  • 18

3 Answers3

7

Try placing all your controls on Canvas. Then you can set Zindex with:

this.controlName.SetValue(Canvas.ZIndexProperty, 10d);
PanJanek
  • 6,593
  • 2
  • 34
  • 41
3

Only the Canvas panel supports a ZIndex property. Stackpanel doesn't because each item is placed one after the other in the panel so they shouldn't overlap each other. This can be a little annoying at times when you have animated transforms moving the items about because the previous assumption isn't actually true.

In general though if you need to place items in a visual stack the Stackpanel isn't the right place for it. Perhaps a Canvas or you could use a Grid where the oridinal position of a element determines its "zorder" in a cell.

AnthonyWJones
  • 187,081
  • 35
  • 232
  • 306
  • 4
    Even with elements in a Grid, you can use .SetValue(Canvas.ZIndexProperty, myValue); and it will work at runtime. – Jeb Dec 27 '10 at 20:14
2

From xaml:

<StackPanel Canvas.ZIndex="1">
</StackPanel>
gdbdable
  • 4,445
  • 3
  • 30
  • 46