Я пытаюсь создать простую панель, которая содержит одного дочернего элемента и привязывает его к ближайшим размерам сетки. Мне трудно понять, как это сделать, переопределив MeasureOverride и ArrangeOverride.
Вот что мне нужно: я хочу, чтобы моя панель сообщила своему владельцу, что (а) она хочет быть как можно большего размера, затем (б) когда она узнает, что это за размер, она изменит себя и свой размер дочерний элемент в соответствии с ближайшей меньшей точкой привязки. Поэтому, если мы приближаемся к 10-м годам, и я могу находиться в регионе размером не более 192x184, панель скажет своему родительскому контейнеру «мой фактический размер будет 190x180». Таким образом, все, что граничит с моим контролем, сможет выровняться по его краям, а не по потенциальному пространству.
Когда я помещаю свою панель в сетку, я получаю либо 0, либо PositiveInfinity (я забыл) за входящий размер в переопределениях, но мне нужно знать, "насколько велика моя площадь на самом деле?" не бесконечности ..
Часть проблемы, я думаю, в том, что WPF считает магические значения PositiveInfinity и 0 для размера. Мне нужен способ сказать через MeasureOverride «Я могу быть настолько большим, насколько вы позволите мне», а в ArrangeOverride фактически изменить размер до привязанного.
Или я поступаю совершенно неправильно? Измерение и компоновка выглядит очень сложно, просто немного побродив по коду для стандартных панелей в Reflector.