UserControl, который также является сеткой в ​​WPF - PullRequest
0 голосов
/ 30 мая 2010

Я хотел бы создать UserControl, который будет иметь некоторое поведение (анимированное свертывание ...) и некоторые элементы управления в нем (Rectangle, Ellipse, в основном для целей проектирования).

Однако мне нужно, чтобы он был действительным Panel, как Grid, чтобы я мог добавить больше элементов управления при проектировании главного окна. Элементы управления, которые будут добавлены к новому USerControl во время разработки главного окна, не должны взаимодействовать с компонентами, которые добавляются к нему при создании UserControl.

Как мне это сделать? Должен ли я расширить Control? Я бы предпочел расширить только UserControl.

Ответы [ 2 ]

1 голос
/ 31 мая 2010

UserControl - это ContentControl, которое имеет свойство Content и обычно отображает его в соответствии с ContentTemplate. Я веду к тому, что в UserControl есть 1 предмет. Конечно, вы можете добавить свойство Children к вашему UserControl и обрабатывать добавление / удаление вложенных элементов в некоторые внутренние Grid в вашем контроле, но это не то, для чего предназначены элементы управления контентом.

Для размещения многих предметов вы должны использовать подкласс Panel, например Grid, как вы упомянули. Все панели имеют свойство Children со списком элементов, расположенных на них. Вы можете унаследовать Grid и разместить там некоторое поведение. Например. Вы можете сделать свойство расширения MyGrid.Collapsed, установить его для элементов в вашей сетке, чтобы оно могло расположить их позиции.

Другим вариантом является создание подкласса ItemsControl. Элементы, помещенные в него, будут отображаться в соответствии с его шаблоном ItemsPanel. Этот подход также дает вам преимущество свойства ItemsSource, которое можно использовать для отображения списка произвольных типов данных, генерируя из них элементы с использованием свойства ItemTemplate.

0 голосов
/ 31 мая 2010

Я искал класс ContentPresenter в сочетании со свойствами зависимости. Подробнее о теме здесь или здесь . Или попробуйте этот поиск в Google .

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