Я хочу реализовать максимальную ширину для столбца uigridlayout
. Хотя реализовать его довольно просто, при установке SizeChangedFcn
для uifigure
:
: *1004*
возникает следующее предупреждение: Обратный вызов 'SizeChangedFcn' не будет выполнен, пока для 'AutoResizeChildren' установлено значение ' on '.
Если использовать uipanel
в uifigure
f = uifigure();
p = uipanel(f, 'BackgroundColor', 'r');
и изменить размер окна, размер панели также изменится. Это останавливается, если установить
f.AutoResizeChildren = 'off'
Конечно, я хочу сохранить автоматическое изменение размера дочерних элементов uifigure
и выполнить обратный вызов. Однако, в моем случае, единственным прямым потомком uifigure
является uigridlayout
, и что интересно (включая его потомков), размер отлично меняется, даже если AutoResizeChildren
установлен на off
:
f = uifigure();
f.Position(3) = 190;
g = uigridlayout(f);
for k = 0:1/3:1
uipanel(g, 'BackgroundColor', [1 1 1]*k)
end
f.SizeChangedFcn = @(h,e)onSizeChanged(f,g);
f.AutoResizeChildren = 'off';
function onSizeChanged(f,g)
w = f.Position(3) - g.Padding(1) ...
- g.Padding(3) - (length(g.ColumnWidth)-1)*g.ColumnSpacing;
if w/2 >= 200
g.ColumnWidth{1} = 200;
else
g.ColumnWidth{1} = '1x';
end
fprintf('\nPanel widths:\n');
for k = 1:length(g.Children)
fprintf('%g: %g\n', k, g.Children(k).Position(3));
end
end
документы говорят:
Свойство AutoResizeChildren влияет на прямые дочерние элементы контейнера, а не на дочерние элементы внутри вложенных контейнеров.
Теперь uigridlayout
в приведенном выше примере является прямым потомком uifigure
, но его размер изменяется.
Кто-нибудь знает, считается ли uigridlayout
особенным в этом случае, и только документы немного короткие, или если это ошибка, и я не должен полагаться на нее?
Версия Matlab была 2019a Обновление 7 Linux.