Преамбула
Однажды, работая с классическим TabControl-ем, мне понадобилось разместить закладки слева от контента (сверху у меня был ToolBar и закладки там были не в тему).Общее описание
Начнем с того, как это вообще выглядит. Я подготовил небольшой демо-проект, результат работы которого показан на рисунке. Как не сложно заметить, наш пример состоит из двух tab-контролей и одной центральной части, прикрепленной сразу к обоим tab-контолям. Сами tab-контроли описываются классом TabStrip, являющимся наследником класса ToolStrip. А наша закладка - это TabStripButon - наследник от ToolStripButton. А это значит, что наши панельки с закладками содержат все возможности ToolStrip-а - могут содержать текст, обычные кнопочки, могут располагаться с любой стороны от основного контента и т. д.. Данный пример целиком подготовлен в дизайнере форм. Закладки тут добавляются из меню на правую кнопку мыши (добраться до основного меню добавления элементов не удалось). Стиль закладок задается в свойстве TabStrip.TabStyle.
Контент
Остается разобраться с тем, что у нас находится в центре окна и как это "что-то" связано с закладками. TabStrip взаимодействует с другими частями кода с помощью интерфейса IComponentSelector, реализация которого задается через свойство Selector. Через поле AllowedComponents реализация интерфейса предоставляет набор компонет, из которых будет осуществляться выбор при переключении закладок.public interface IComponentSelector { IEnumerable<IComponent> AllowedComponents { get; } IComponent SelectedComponent { get; set; } event EventHandler SelectedComponentChanged; }В настоящий момент есть одна реализация этого интерфейса - SingleViewPanel. Это панель, содержащая набор контролей и следящая за тем, что бы только один контроль был видимым.
Известные недочеты
Как уже упоминалось выше, мне не удалось встроить добавление закладки в меню добавления элементов ToolStrip-а и его пришлось вынести в меню на правую кнопку мыши. Кроме того, не стоит изменять отступы (Padding и Margin) - это приведет к некорректному отображению закладок.Файлы
Все файлы вместе с демо-проектом собраны в один архив. Их можно скачать тут:скачать с Яндекс диск
Комментариев нет:
Отправить комментарий