2016-01-28 2 views
1

Я новичок в XAML и пытаюсь во время выполнения добавить динамическое количество кнопок в контейнер, который масштабируется с текущей шириной и высотой окна. Кнопки должны быть расположены по центру и расположены рядом друг с другом, и если на одной линии недостаточно места, слишком широкая кнопка перемещается над другими кнопками и т. Д., Что приводит к «плавному» поведению, известному из HTML.Плавающие элементы управления в контейнере с динамической шириной в XAML

Если есть достаточное количество кнопок для увеличения высоты контейнера, превышающей окно, то в этой части можно прокручивать эту часть, я не думаю, что это проблема, но поведение «float» я не могу понять, как это сделать. Я попытался с доступными панелями, но ни один из них не подходит для этой цели, и я думаю о создании настраиваемого элемента управления, который позиционирует дочерние элементы управления так, как я хочу, но каким-то образом это может быть достигнуто с помощью стандартных элементов управления?

Я разрабатываю это в UWP как универсальное приложение для настольных компьютеров и мобильных устройств.

Спасибо за любой вход к моей проблеме :)

+0

Вы попробовали Wrappanel? У этого есть поведение «плавающего» или «обертывания», которое приведет к тому, что элемент управления будет превышать размер окна до следующего доступного пространства в левом нижнем углу. – mrsargent

+0

В UWP Wrappanel заменяется VariableSizedWrapGrid, с которым мне нужно поведение переноса, но оно размещает элементы управления в макете сетки, и вам нужно указать строки и столбцы, которые мне не нужны. Элементы управления должны располагаться свободно без определения столбцов. –

+0

[ItemsWrapGrid] (https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.itemswrapgrid) не требует такой вещи. –

ответ

0

Может быть, вы могли бы достичь того, чего вы хотите с помощью комбинации RelativePanel и пару VisualStates и визуального состояния триггеров, таких как AdaptiveTrigger или некоторые из WindowsStateTriggers библиотеки. С их помощью вы можете определить разные визуальные состояния, каждый из которых представляет собой разный макет кнопок и определяет триггеры, которые применяют эти состояния на основе некоторых условий (скорее всего, исходя из размера вашего контейнера). Это очень хороший пример такого подхода, описанного в this blog post.

+0

Я использую визуальные состояния в других частях приложения, но я не вижу, как я могу применить их для этой конкретной цели? Каждая кнопка должна быть расположена индивидуально и должна сдвигать положение x и y в зависимости от размера контейнера и размерами кнопок слева и справа от каждой кнопки. Я думаю, мне нужен пример базового использования AdaptiveTriggers, где динамические элементы управления расположены в зависимости от других элементов управления и их родительского контейнера? :) –

+0

Пожалуйста, проверьте мои ссылки на WindowsStateTriggers и на сообщение Laurent Bugnion о объединении RelativePanel и визуальных состояний + триггеров и возвращайтесь к вопросам после этого! ;) –

+0

Я _have_ рассмотрел ссылки, которые вы предоставили, даже до того, как вы разместили их, так как я долгое время искал Google, пытаясь найти решение. Я тестировал RelativePanel, но свойства Align недостаточно универсальны, вы можете поместить элемент управления в правую, левую, верхнюю и нижнюю части другого элемента управления, но мне нужно сделать каждую «строку» позиции управления текучей и не привязать к другим элементам управления ,Поэтому, возможно, это я новичок в XAML и UWP, но я просто не вижу, как добиться этого, используя стандартные элементы управления :) –