Я работаю над настраиваемым элементом управления в WPF, который реализует OnRender, вызывая функцию посещения с собой в качестве посетителя. Элемент управления реализует интерфейс посетителя, который по мере необходимости рисует линии, круги и т. Д. Нет дочерних элементов управления.WPF: Пользовательский макет управления
Это все работает, когда элемент управления отображается, я вижу, как примитивы отображаются из моего вызова OnRender.
Однако то, с чем я борюсь, - это управление макетом, вытекающее из этого. Управление изображением делает именно то, что я хочу сделать. Как воспроизвести это поведение? В частности:
- Если пользователь не указывает ширину или высоту, я хочу установить визуализированную ширину/высоту элемента управления (либо в моем конструкторе, либо из другой функции, которая управляет компоновкой).
- Если пользователь задает ширину или высоту для определенного значения, я хочу преобразовать рисунок таким образом, чтобы соотношение сторон элемента управления и чертежа сохранялось.
Я пытаюсь использовать функции MeasureOverride для реализации поведения, которое я хочу, но я не получаю никаких результатов. Мое управление расположено с нулевой шириной/высотой, а затем все мои рисунки рисуются поверх соседних элементов управления. Вот что я пытаюсь до сих пор, надеюсь, это показывает, что я пытаюсь сделать:
protected override Size MeasureOverride(Size constraint)
{
SymbolLayout symbol = new SymbolLayout(this);
component.LayoutSymbol(symbol);
Point b1 = MapToPoint(symbol.LowerBound);
Point b2 = MapToPoint(symbol.UpperBound);
return new Size(b2.X - b1.X, b2.Y - b1.Y);
}
Я даже не уверен, что MeasureOverride является правильной функции использовать для достижения этой цели ...