locked
Возможности разметки XAML (WP8.1) RRS feed

  • Общие обсуждения

  • Добрый день!

    Подскажите, возможно ли в разметке XAML (для WP8 и выше) для элементов (stackpanel/grid/textblock  и тп) указывать выравнивание относительно других элементов? Аналогично св-вам Align* в Андроиде (эклипс, ява). Пока наблюдаю простейшие варианты выравнивания по вертикали-горизонтали, не могу понять - неужели тут еще нет возможности указать и заякорить положение относительно других элементов?

    15 марта 2015 г. 15:37

Все ответы

  • Пока наблюдаю простейшие варианты выравнивания по вертикали-горизонтали

    Для андроида не разрабатывал, не очень понятно что именно хочется, по диагонали?
    15 марта 2015 г. 16:31
  • Выравнивание теперь определяется контейнером, а не элементом как это было в Forms.

    Так что используйте нужные контейнеры как то Grid или DockPanel.

    http://www.wpftutorial.net/DockPanel.html


    This posting is provided "AS IS" with no warranties, and confers no rights.

    15 марта 2015 г. 17:01
  • Попробую с примером:

    На этом шаблоне выделенный блок в центре (с текстом 435*, извините, это шаблон с мусором, не вписал более реалистичную "рыбу") сверху заякорен в TOP, слева к темному блоку с датами, справа к картинке с фотокамерой, снизу к текстовой метке "Rfccf...". Никаких абсолютных значений не указано, при изменении размеров картинки справа центральный блок уменьшится по ширине, вложенный в него текст выровнен по центру именно этого блока и может быть многострочным. При длинном тексте в нижней текстовой метке она тоже станет в две строки и центральный блок сожмется (а текст в нем, соответственно все равно будет по середине места доступного блоку). Т.е. фактически центральный блок занимает максимальную площадь ограничивая себя другими контролами. При этом нижняя метка имеет возможность растягиваться до конца всей серой панели (т.е. картинка не находится в ячейке-столбце грида, как нижняя метка). При этом все "резиновое" что не имеет фиксированных размеров, разумеется.

    Когда я в визуальном редакторе студии (VS2015) пытаюсь курсором заякорить правую границу блока - в код разметки блока просто прописываются абсолютные значения margin (например Margin="12,0,420,512").

    В эклипсе (студия для андроида) для элементов есть такие св-ва:

    Насколько я понял, то в VS2015 для WP есть приближенно то, что выделено красным, а таких удобных св-в как "справа от элемента", "ниже после элемента" нет?

    15 марта 2015 г. 17:09
  • Ilya Tumanov, Какая разница, ну заменить картинку контейнером_1 выровняв его справа-сверху, а центральный блок будет контейнер_2 - как его "упереть" в первый контейнер чтобы он занимал всю площадь по-ширине от темного блока слева (пусть контейнер_3) до первого?


    Т.е. понятно, что в моем примере фактически грид на 4 ячейки, но бывает сложнее интерфейс
    15 марта 2015 г. 17:12
  • В данном случае будет один контейнер, скажем докпанел в котором будут остальные элементы.

    Список с датами доким слева, картинку доким справа текст доким вниз, абракадабру назначаем последним элементом:

            <DockPanel LastChildFill="True">
                <StackPanel Orientation="Vertical">
                    <Button>Дата 1</Button>
                    <Button>Дата 2</Button>
                </StackPanel>
                <Button Content="Текст снизу" DockPanel.Dock="Bottom"/>
                <Button Content="Фотка" DockPanel.Dock="Right" VerticalContentAlignment="Top" />
                <Button Content="Абракадабра"/>
            </DockPanel>

    Да, "такие удобные свойства" были ликвидированы в WPF и заменены на контейнеры. Grid позволяет в общем то делать практически что угодно.

    Кстати, если вам очень дороги "такие удобные свойства" то всегда можно написать свою панель которая будет их симулировать. 


    This posting is provided "AS IS" with no warranties, and confers no rights.

    15 марта 2015 г. 17:54
  • Работал я с чем-то подобным (в другой среде разработке), честно сказать, как сделано в XAML мне больше нравится, потому что когда есть куча элементов, причем каждый следующий привязан к предыдущему или хуже того к нескольким, получается такая каша, что просто даже вспоминать об этом не хочется.

    По поводу как такое сделать: например можно использовать сетку, причем нужно не забывать, что размеры ячеек можно указывать как в абсолютных значениях, так и указать:

    "Auto" - размер ячейки будет определяться по содержимому;

    "*" - займет всё доступное место.

    Всё это написано тут:

    https://msdn.microsoft.com/ru-ru/library/windows/apps/windows.ui.xaml.controls.grid.aspx

    https://msdn.microsoft.com/ru-ru/library/windows/apps/windows.ui.xaml.gridlength.aspx

    15 марта 2015 г. 19:15
  • Работал я с чем-то подобным (в другой среде разработке), честно сказать, как сделано в XAML мне больше нравится, потому что когда есть куча элементов, причем каждый следующий привязан к предыдущему или хуже того к нескольким, получается такая каша, что просто даже вспоминать об этом не хочется.

    Ну если говорить уж на чистоту, то куча вложенных гридов эмулирующих привязку тоже никак не лучше выглядят :) К тому же в андроиде были те же самые св-ва что и в xaml, плюс дополнительные, можно было пользоваться только нужными (хотя таблицы, как таковой, в андроиде нет, есть ужасно глючное подобие грида).
    15 марта 2015 г. 20:36
  • Ну возможно это дело привычки, но компоновка на основе грида популярна и в HTML: см. bootstrap, да и раньше (если не ошибаюсь), кто не хотел мучаться с css и div, чтобы эмулировать таблицу, просто использовали table.

    Кроме грида есть еще и другие контейнеры, выбирайте на вкус))

    15 марта 2015 г. 20:55
  • Вы завели спор на пустом месте. Автор вопрос просто не до конца разобрался с возможностями XAML, поэтому считает его не удобным.

    При изучении XAML идеально научится писать его в ручную, а не составлять в дизайнере. Дизайнер не так хорош и зачастую лепит лабуду. То что вы описали в примере очень легко решается в XAML и будет работать именно так как вы хотите.

    Если вопрос еще актуален могу написать вам XAML описанного выше примера.


    VB.Net - WPF, WinRT, WP

    16 марта 2015 г. 7:58
  • Вы завели спор на пустом месте. Автор вопрос просто не до конца разобрался с возможностями XAML, поэтому считает его не удобным.

    При изучении XAML идеально научится писать его в ручную, а не составлять в дизайнере. Дизайнер не так хорош и зачастую лепит лабуду. То что вы описали в примере очень легко решается в XAML и будет работать именно так как вы хотите.

    Если вопрос еще актуален могу написать вам XAML описанного выше примера.


    VB.Net - WPF, WinRT, WP


    Я не говорю что нельзя сделать, я спрашивал нет ли более удобных в некоторых случаях свойств. Для человека верстающего на таблицах возможности грида понятны, но когда вам в готовом интерфейсе надо рядом с меткой вывести что-то навроде "степени" (картинка или текст, справа и сверху), то перепахивать весь грид чтобы указать заново всем нужную ячейку - это как-то неудобно, как минимум. Ранее я бы просто выставил два свойства (справа и над объектом) и все, и новый элемент вел бы себя как DIV в другом слое, следовал бы за нужным элементом и не мешал бы остальным в общем гриде.
    16 марта 2015 г. 15:48
  • Просто вы еще не научились мыслить на XAML, поэтому вам и кажется это неудобным.

    Вопрос привычки, как и было сказано выше.


    VB.Net - WPF, WinRT, WP

    16 марта 2015 г. 16:07