WPF — возможность группировать несколько элементов управления вместе и показывать одну из нескольких «страниц»

#c# #.net #wpf #devexpress

#c# #.net #wpf #devexpress

Вопрос:

Извините за странный заголовок.

Допустим, у меня есть поле со списком с 3 значениями: A, B, C.

Если выбрано значение «A», я хочу отобразить определенный набор элементов управления. Если выбрано значение «B», я хочу показать другой набор элементов управления, но в том же месте в билете.

В принципе, как элемент управления табуляцией, но я не хочу, чтобы вкладки были видны, но мне нужны определенные «страницы», и в зависимости от привязанного значения, для отображения одной из этих страниц.

Я знаю, что могу создавать отдельные пользовательские элементы управления и устанавливать видимость каждого на основе значения выпадающего списка, но затем в моем конструкторе wpf я застрял, видя все возможные «страницы» одновременно.

Возможно ли это сделать в WPF? Спасибо.

Комментарии:

1. Как насчет привязки видимости любого естественного контейнера к определенному значению поля со списком с помощью ValueConverter?

2. Это сработало бы, но, как я уже говорил выше, конструктор не будет точным представлением экрана. Т.Е. Может быть 10 элементов управления, из которых только 1 будет виден в любой момент времени, а остальные не будут занимать никакого места.

3. Пусть все они будут видны в режиме разработки. Настройте bool / Видимые свойства для привязки. В режиме разработки пусть все они возвращают true .

Ответ №1:

Недавно я столкнулся с очень похожей ситуацией. Моим решением было использовать элемент управления Frame. Управление фреймом позволит загружать в него различные страницы. Каждая страница может содержать различный набор элементов управления, как и в главном окне. Если навигация по фрейму отключена, она должна быть довольно близка к тому, что вы ищете. Пример Xaml:

  <Frame Name="thisFrame" Width="250" Height="400" 
  NavigationUIVisibility="Hidden" />
  

В вашем обработчике событий для изменения поля со списком:

 thisFrame.NavigationService.Navigate(new PageClassName() );
  

Это заставит фрейм отображать выбранную страницу. При желании вы можете указать здесь параметры для установки состояний по умолчанию для элементов управления пользовательского интерфейса на вашей новой странице. Если вы передаете объект таким образом, вы можете привязать элементы управления пользовательского интерфейса к объекту, чтобы сохранить изменения.

Комментарии:

1. Большое спасибо за ваш быстрый ответ! Я только что узнал, что в DevExpress 11 также есть возможность скрыть фактические вкладки. Я обязательно попробую ваше решение, еще раз спасибо.

2. Удачи вам! Если ваше решение в конечном итоге сработает, я бы посоветовал вам опубликовать его в качестве ответа на этот вопрос.

3. Это действительно работает! Я опубликую образец в понедельник. Еще раз спасибо за вашу помощь.

Ответ №2:

Это мой пример решения. Обратите внимание, что он использует DevExpress 11, который обладает функциональностью для удаления заголовков вкладок из элемента управления вкладкой. (Где UsePage1 и UsePage2 являются логическими значениями в моей viewmodel. Только одна может быть истинной в данный момент времени).

 <DXTabControl SelectedIndex="0"  Width="Auto" >
<DXTabControl.View>
   <TabControlMultiLineView HeaderLocation="None" />
 </DXTabControl.View>
<DXTabItem IsSelected="{Binding Path=UsePage1}" >
</DXTabItem>
<DXTabItem IsSelected="{Binding Path=UsePage2}" >
</DXTabItem>
</DXTabControl>