Ultimately, I found it out with the help from a Mathworks® employee. The following code would do the job for the specific color problem and you can derive from that how to do the trick with multi struct assignments in general:
figure
plot(rand(10,5))
legend('Eine', 'Insel', 'mit', 'zwei', 'Bergen');
a = gca;
pause(1); % just that you see that the figure had colors before...
originalColorsCell = {a.Children.Color};
grayColorsCell = cellfun(@(x) {rgb2gray(x)}, originalColorsCell);
[a.Children.Color] = deal(grayColorsCell{:});
So the basic solution is to store the nested struct to a cell with similar structure (I am assuming that there are multiple Children, each having a field called Color). For example Children could be a [8x1-struct] and Color could be a [1x3-double]. Using x = {a.Children.Color} will result in a [1x8-cell], each of these 8 storing a [1x3-double] - so it's basically a conversion from struct to cell if you want so.
*The important (and not so intuitive) command* is the elementwise assignment of the cell contents (needs: {:} ) to the several fields of a.Children.Color (needs square brackets around: [a.Children.Color]):
[a.Children.Color] = deal(x{:});
In fact it even works without deal
[a.Children.Color] = x{:};
(at least for R2014b and higher), as x{:} and [a.Children.Color] should have the exact same number of elements overall. It is easy to understand if you try
u = [a.Children.Color];
v = [x{:}];
as both, u and v will result in a [1x8*3-double] = [1x24-double], which explains why no deal() is needed. But you should probably keep deal in mind for cases where you want to assign a smaller cell to a larger struct... (probably for example if "a" was a [5x1] axis (5 axes) instead of [1x1] and each having [1x8-struct] Children each having a [1x3] Color double).
Best regards,
usr0815