2010-09-13 4 views
0

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

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

alt text

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

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

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

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

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

Спасибо заранее!

ответ

1

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

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

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

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

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

+0

Спасибо, Алекс! Я знаком с MVVM, поэтому я не стану проблемой. Но я до сих пор не понимаю, как позиционировать WrapPanel: если он помещен в ячейку Grid, тогда он фиксирует высоту = высоту ячейки сетки. –

+0

Фактически, он будет иметь фиксированную высоту, если вы установите его как таковой. Если он содержится в ячейке сетки и требует больше места (вы добавляете к нему больше предметов), он будет запрашивать больше места и повторной компоновки; если родитель отрицает запрос на большее пространство, он будет ограничен максимальным значением, разрешенным родителем. Все это осложняется множеством свойств, которые вы можете установить, например, горизонтальные и вертикальные выравнивания, растягивание, связанные с прокруткой и т. Д., А также подстроки макета, встроенные в каждый элемент управления. Однако, если вы некоторое время играете в дизайнере, все это должно стать довольно очевидным. –

+0

Спасибо, Алекс! Вы много помогли! –

Смежные вопросы