thnx for tips. I checked everything. But I think this is something different. It has nothing to do with markup, but code behind.
Whole control is just asp wizard with multiple steps. Only important markup is:
<asp:WizardStep ID="Step7" runat="server">
<asp:Panel ID="Step7Panel" runat="server">
<!-- 1st grid loaded OnInit -->
<asp:PlaceHolder ID="OutputFormPlaceholder1" runat="server" />
<!-- 2nd dummy grid breaks styles -->
In OnInit is loaded another user control with RadGrid to OutputFormPlaceholder1. When loaded, it is initialized and is called Rebind() and some other things.
When step is changed, Wizard_ActiveStepChanged is fired and grid on that loaded control is rebound again. Well, is seems to be a bug in our code, because Rebind is called 2 times. But this simple flow works fine, grid is displayed fine.
Problem appears when another grid is on the same step template. I tested it just adding dummy grid. No codebehind. Just markup as above. Then after step is loaded (and rebind is called 2 times of course), original grid is broken.
And I really don't get it. How can another grid in page break everything? Why this 2nd grid forces fallback to classic rendering? How exactly grid decide if load classic or lightweight theme? Is it related to asp lifetime flow?
I'm still trying to create sample, but it is hard.