Порядок стопки изображений (эквивалент z-индекса) - PullRequest
8 голосов
/ 29 марта 2011

Вероятно, это довольно простой вопрос, но мне не удалось найти что-либо здесь или в Google.Любая помощь приветствуется.

Есть ли свойство, которое определяет порядок расположения объектов (прямоугольники изображений и т. Д.) В приложении Windows Phone 7.Я добавляю некоторые из кода и некоторые из XAML.То, что я в основном ищу, - это свойство z-index, но его, похоже, не существует.

Ответы [ 3 ]

8 голосов
/ 29 марта 2011

Если у вас есть объекты в Canvas, вы можете использовать свойство Canvas.ZIndex , чтобы установить порядок стеков.

1 голос
/ 29 марта 2011

Используйте вложенное свойство Canvas.ZIndex .Он должен работать со всеми контейнерами макетов, а не только с Canvas.

В большом .NET на самом деле есть Panel.ZIndex , который имеет больше смысла, но Canvas.ZIndex , кажется, прекрасно работает в WP7.

1 голос
/ 29 марта 2011

В XAML порядок элементов по умолчанию противоположен тому, как они отображаются в разметке (последний элемент в XAML отображается вверху стека).

В качестве теста я написал следующее.

XAML:

<Window x:Class="Order.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Canvas Name="LayoutTest" Margin="0">
            <Label Background="Red" Margin="0,0,0,0" Content="Added in XAML"/>
        </Canvas>
    </Grid>
</Window>

Код:

    public MainWindow()
    {
        InitializeComponent();

        for (int i = 0; i < 10; i++)
        {
            Label lbl = new Label();
            lbl.Height = 100d;
            lbl.Width = 100d;
            lbl.MouseLeftButtonUp += rec_MouseLeftButtonUp;
            lbl.Content = "Label number "  + i.ToString();
            lbl.Background = Brushes.White;
            lbl.Foreground = Brushes.Black;

            LayoutTest.Children.Add(lbl);
        }
    }

    void rec_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        Label obj = sender as Label;
        if (null == obj) return;
        obj.Visibility = Visibility.Collapsed;
    }

В результате элементы, добавленные в XAML, появляются в нижней части стека в порядке, описанном выше. Элементы, добавленные в коде, отображаются над ними, и их порядок определяется порядком, в котором они были добавлены - первый добавленный элемент находится в нижней части определенного порядка, увеличиваясь в стеке по мере добавления.

Итак, на «дне» стопки находится ярлык
«Добавлено в XAML», за которым следует
«Метка № 0»,
«Метка № 1»,
... до ...
«Ярлык № 9» - самый верхний, сразу видимый элемент.

Беспокоить! Я просто потратил 10 минут, доказывая, что это не так. ;) Ответ Роя Си ниже, вероятно, то, что вы искали, но, если повезет, этот ответ кому-нибудь пригодится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...