如何控制Z阶网格

时间:2011-06-23 22:21:32

标签: c# silverlight grid z-index

我有以下代码:

        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属性。

1 个答案:

答案 0 :(得分:1)

您的第一次SetZindex来电:

Canvas.SetZIndex(grd, 1000);

错误地将设置应用于Grid而不是Viewbox。它应该是:

Canvas.SetZIndex(vb, 1000);

因为ViewboxCanvas的孩子。

同样,您的第二个SetZIndex电话:

Canvas.SetZIndex(grd, 0);

适用于错误的Grid。它应该是:

Canvas.SetZIndex(cosmeticGrd, 0);

总之,Canvas.ZIndex附加属性会影响Canvas个孩子的排序。