WPF: ArrangeOverride в настраиваемой панели StackPanel

Я хочу создать настраиваемую панель, чтобы (среди прочего) вставлять интервал между всеми дочерними элементами. Наследование от Panel казалось очень сложным и, возможно, ненужным. То, что я хочу, близко к StackPanel, поэтому я решил, что могу унаследовать от StackPanel и изменить ArrangeOverride и MeasureOverride, чтобы получить то, что хочу. Я получил их реализацию от Reflector, но сразу заметил, что одно свойство вообще недоступно из унаследованного класса, а именно IsScrolling (и поле _scrollData). Мой вопрос в том, могу ли я пропустить это или есть другой способ реализовать идентичное поведение? Я не уверен, что мне понадобится прокрутка для этой настраиваемой панели, но я могу когда-нибудь это сделать, и я не хочу загонять себя в угол ...


person Andreas Zita    schedule 02.03.2011    source источник


Ответы (1)


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

чтобы создать собственное поведение, просто реализуйте Behavior<Panel>. Это говорит само за себя, но если вы не знаете, как это сделать, спросите.

person Elad Katz    schedule 02.03.2011
comment
Я хочу добавить пространство между дочерними элементами без использования поля (они также должны иметь возможность использовать другие поля), и я хочу иметь возможность указать свойство Fill для закрепления / заполнения дочерних элементов в соответствии с некоторыми правилами, и я хочу добавить свойство группировки для разделения групп детей с большим пространством и т. д. Могу ли я сделать все это с помощью Behavior? Кажется, кастомная панель более уместна? - person Andreas Zita; 02.03.2011
comment
В этом случае да, Custom Panel - лучший вариант. Что касается вашего вопроса, то я думаю, что это часть инфраструктуры IScrollInfo, используемой для обработки интеграции ScrollViewer. Я думаю, вы можете игнорировать это, если вам не нужно настраивать поведение при прокрутке. - person Elad Katz; 02.03.2011
comment
Я бы сказал, что Элад, вам действительно нужна серьезная причина, чтобы выбрать маршрут пользовательской панели. Всегда приятно полагаться на существующий функционал. Для начала я бы посоветовал, чтобы панель Dock в качестве основного элемента пользовательского интерфейса была более подходящей из-за использования Fill. Поля можно сделать, включив элементы-разделители, если вы не хотите путаться с полями элементов. Группирование может быть выполнено с использованием стековых панелей в качестве дочерних элементов. Не могли бы вы прислать нам изображение того, как это должно выглядеть? - person ; 02.03.2011
comment
Я заметил, что DockPanel имеет гораздо более простую реализацию, чем StackPanel. Я создам свою настраиваемую панель, используя DockPanel в качестве чертежа. Спасибо за советы ... - person Andreas Zita; 02.03.2011