Автоматическое расположение, увеличивающее количество элементов управления - PullRequest
3 голосов
/ 28 февраля 2012

Я немного новичок в WPF и, надеюсь, я не спрашиваю о мире здесь, но я ищу совет / руководство о том, как реализовать что-то вроде следующего.

Я бы хотелчтобы мои MainWindow содержали N кнопок.Каждый Button выполняет одно и то же действие с различным набором данных (т. Е. Печатает картинку 1, печатает картинку 2, ..., печатает картинку N).Мне бы хотелось, чтобы в моем окне автоматически размещались кнопки, как описано ниже:

enter image description here

Обратите внимание, как увеличивается количество кнопок, расположение автоматически настраивается в приятной манере.До 6, а затем он обеспечивает горизонтальную прокрутку для перемещения по кнопкам.

Я чувствую, что элемент управления <Grid> может быть способом обеспечить это, но я потерял в том, чтобы получить автоматическийВ макете нет ничего более грубого.

Тангенциально, я вижу мощь привязки данных в WPF, и в идеале информация о кнопке (текст, графика и т. д.) будет автоматически привязана к наблюдаемой коллекции.чтобы при вставке кнопок в коллекцию пользовательский интерфейс автоматически обновлялся.И наоборот, когда нажимается каждая кнопка, я бы хотел, чтобы общий обработчик know button 5 соответствовал 5-му элементу в моей коллекции, в котором есть вся эта дополнительная информация (то есть имя файла картинки для печати),

Все это звучит хорошо и хорошо, но, опять же, я немного потерян в реализации.

Ответы [ 2 ]

1 голос
/ 29 февраля 2012

Как сказал Allonym, самый настраиваемый способ - создать для этого новый пользовательский Panel.ИМХО, также возможно достичь этого, используя UniformGrid, и немного подправив его привязками и конвертерами.Это для макета.

По поводу вашего второго вопроса, я думаю, использование ItemsControl - лучший способ.Вы можете передать его своим новым Panel (или UniformGrid) как ItemsPanel.Кроме того, вы можете затем создать DataTemplate с кнопкой внутри, связать ее свойство Command с одной командой (= универсальный обработчик), используя в качестве параметра DataContext DataTemplate (= текущий элементсписок).Эта часть проще, чем макет.

Помогает ли это?

Антуан

0 голосов
/ 28 февраля 2012

Я думаю, вам нужно создать собственный класс Panel, переопределяющий MeasureOverride и ArrangeOverride, чтобы получить желаемый макет. Проверьте это (очень краткое) учебник .

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