(WPF) Всплывающее окно с макетом TabItem - PullRequest
0 голосов
/ 30 апреля 2020

В настоящее время у меня есть приложение, которое использует функцию ToggleButton / Popup, и все это работает, как и ожидалось, но я хотел посмотреть, есть ли способ (либо с помощью шаблонов элементов управления, либо с помощью пользовательских элементов управления), который позволяет включить кнопку переключения как часть всплывающего окна.

Эффект, к которому я стремлюсь, аналогичен стандартному макету TabControl / TabItem, но вместо этого ToggleButton заменит заголовок TabItem, а всплывающее окно будет служить его содержимым.

В В завершение я хочу, чтобы всплывающее окно отображалось непосредственно с правой стороны ToggleButton и имело одну непрерывную границу, которая обернута вокруг внешних краев ToggleButton и внешних краев всплывающего окна без какой-либо границы между ними. Окончательный вид не показал бы разделения между двумя элементами управления, и пользователь воспримет ToggleButton и Popup как один элемент управления.

Я подумал, что возможно было бы отредактировать шаблон стандартного TabItem и покажите его свойство содержимого в виде всплывающего окна, но еще не пробовали.

Дайте мне знать, если вы считаете, что это путь к go или есть какие-либо другие потенциальные решения. Спасибо.

1 Ответ

0 голосов
/ 30 апреля 2020

Почти все в WPF может быть сделано несколькими способами. То же самое относится и к вашей цели.

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

Я бы создал пользовательский элемент управления, который наследуется от HeaderedContentControl. Свойство Header - это содержимое вашего ToggleButton, а свойство Content - это содержимое вашего Popup. Поскольку у вас есть ControlTemplate и код, вы можете заставить его выглядеть и функционировать именно так, как вам нужно, без каких-либо компромиссов.

...