Контроль позиционирования и привязки - PullRequest
0 голосов
/ 13 сентября 2010

Я использую WinForms с момента появления первого фреймворка и вложил в него много времени и сил. Сейчас я пытаюсь перейти на WPF, и, честно говоря, это не так просто.

Теперь у меня есть задача, мне нужно реализовать простой мастер, каждая страница которого имеет выровненную по центру группу элементов управления. Группа содержит набор кнопок по четыре кнопки в ряд. Ширина группы постоянна, высота переменна - зависит от количества кнопок внутри.

alt text

Это простая задача для WinForms, но я не знаю, как это сделать с помощью XAML.

У меня три вопроса:

1). Очевидно, что кнопки внутри группы - это WrapPanel , который находится в ячейке сетки. Это просто. Но как рассчитать высоту WrapPanel , не использующего код позади?

2). Какой рекомендуемый способ реализации мастера? Шаблон данных или какой-то Tab Control ? Мне, вероятно, понадобятся некоторые эффекты перехода при переключении страниц.

3). Допустимо ли в мире WPF использовать привязку как способ изменения положения элементов управления?

Заранее спасибо!

1 Ответ

1 голос
/ 13 сентября 2010

WrapPanel автоматически отрегулирует свою высоту в зависимости от содержимого по умолчанию.WPF - это большой прогресс от WinForms именно благодаря новым парадигмам макета.Никакой код не требуется для всего, что вы упомянули.

Что касается 2;Есть много способов реализовать это, в зависимости от того, насколько близко вы придерживаетесь MVVM (если вообще);Сначала я бы рекомендовал использовать стилизованный TabControl (вы можете настроить стиль, чтобы визуально представить шаги мастера в виде вкладок, не позволяя пользователю переходить между вкладками), так как это проще всего.Кроме того, к TabControl можно привязать практически все.

3 возможно, но это необходимо редко.И я это имею в виду.

Теперь тогда;простой пример, чтобы показать вам силу WPF.Вы можете иметь в своей ViewModel (если вы не знакомы с MVVM, поищите его в Google или прочитайте любую статью или книгу Джоша Смита или ... вау, как много информации об этом, я нене знаю, какой выбрать) набор объектов, скажем, классы Step, которые вы можете привязать к ItemsSource элемента TabControl.TabControl автоматически создаст вкладку для каждого вашего шага.Внутри вашего класса Step вы можете иметь коллекцию элементов, скажем ... хм, Collection<Push> (я изо всех сил стараюсь не использовать известные классы, такие как Action или Button).Если ItemTemplate TabControl содержит что-то, что распознает эту коллекцию, как в ListBox, внутренне стилизованном для использования WrapPanel для его ItemsContainer, то все готово: шаблон покажет список Pushes в WrapPanel, и это все.

Теперь, я, наверное, не должен писать здесь полное руководство в любом случае, но это должно помочь вам начать.Читайте о DataTemplates, ItemsControl и т. Д. (Опять же, у меня возникают трудности при выборе ресурсов ... Д-р. WPF имеет отличные статьи по обоим, но они могут быть немного продвинутыми), и вы должны хорошоидти.Просто помните, что есть веская причина, по которой в WPF реализовано гораздо больше гибких макетов, чем у любой предыдущей настольной технологии, вам следует ознакомиться с этим.

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