我有以下代码:
TextBlock tmp = new TextBlock
{
Text = displayText,
Foreground = new SolidColorBrush(Colors.Red),
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center,
FontSize = 30
};
Grid grd = new Grid();
grd.Children.Add(tmp);
// grd.Background = new SolidColorBrush(Colors.LightGray);
Viewbox vb = new Viewbox();
vb.Child = grd;
vb.Width = width;
vb.Height = height;
DrawingCvs.Children.Add(vb);
Canvas.SetLeft(vb, xpos);
Canvas.SetTop(vb, ypos);
Canvas.SetZIndex(grd, 1000);
// we need a second grid for cosmetic reasons. Due to
// how the viewbox works, when we resize we lose the full
// width of the grid which has a textblock in it
Grid cosmeticGrd = new Grid
{
Width = width,
Height = height,
Background = new SolidColorBrush(Colors.LightGray)
};
DrawingCvs.Children.Add(cosmeticGrd);
Canvas.SetLeft(cosmeticGrd, xpos);
Canvas.SetTop(cosmeticGrd, ypos);
Canvas.SetZIndex(grd, 0);
我想要的是在代码中首先添加的网格在网格上方添加第二个。我的Z-Index属性设置有什么问题?还是别的什么?
InB4更改您在代码中添加它们的顺序 - 是的我意识到这一点,但作为理解点,我想了解ZIndex属性。
答案 0 :(得分:1)
您的第一次SetZindex
来电:
Canvas.SetZIndex(grd, 1000);
错误地将设置应用于Grid
而不是Viewbox
。它应该是:
Canvas.SetZIndex(vb, 1000);
因为Viewbox
是Canvas
的孩子。
同样,您的第二个SetZIndex
电话:
Canvas.SetZIndex(grd, 0);
适用于错误的Grid
。它应该是:
Canvas.SetZIndex(cosmeticGrd, 0);
总之,Canvas.ZIndex
附加属性会影响Canvas
个孩子的排序。