Hi,
after switching to the SP2 (2010.1.10.504) I have a lot problems using themes. When I add the Office black theme and start my application I get two errors that resources are missing (TabOffice12Shape and another one). When I add the Office 10 theme and start the application I get a System.ArgumentException "Specified resource does not exist.". This only happens when I start the application without debugging. If I use the debugger, it works fine. So I think there is a major timing problem when themes are loaded. My I solution is now to remove the Telerik controls and switch back to normal Windows Forms controls.
Martin
9 Answers, 1 is accepted
Hi,
there seem to be problem with the resource loader. The ThemeResolutionService uses the calling and the executing assembly to find the corresponding resource stream. The calling resource is normally the right one but don't work in my application without debugging. In the MSDN I found that the calling assembly could change if the calling methode is inlined or jitted. Therefore I tried load the theme resource by my own:
Assembly lAssembly = Assembly.GetAssembly(typeof(Telerik.WinControls.Themes.Office2010Theme)); |
Telerik.WinControls.ThemeResolutionService.LoadPackageResource(lAssembly, "Telerik.WinControls.Themes.Office2010.tssp"); |
If I do so, the theme is loaded but then I get the rror message that the TabIeShape resource could not be found.
I'm using VS2010 and the .net 4.0 framework. I know that there a a lot of changes which may be the cause for this problem.
Regards
Marttin
The issue regarding shapes comes from the fact that when you drop an Office2007Black component on your form, only Telerik.WinControls and Telerik.WinControls.Themes.Office2007Black assemblies are loaded in the project. However, the shapes are contained in Telerik.WinControls.UI assembly, so as a result you get a message that they can't be found. You can either drop a single RadButton instance on your form in order to get a reference to Telerik.WinControls.UI assembly, or you can add a reference to Telerik.WinControls.UI assembly manually. This issue will be addressed in Q2 2010.
As to the second issue concerning the Office2010 theme, you are absolutely right. Thank you for your feedback and cooperation on the issue. Your Telerik points have been updated for it. You can avoid the missing shape message by creating a new instance of the shape. Please note that the Telerik.WinControls.UI assembly should be referenced:
new
Telerik.WinControls.UI.TabIEShape();
Assembly lAssembly = Assembly.GetAssembly(
typeof
(Telerik.WinControls.Themes.Office2010Theme));
Telerik.WinControls.ThemeResolutionService.LoadPackageResource(lAssembly,
"Telerik.WinControls.Themes.Office2010.tssp"
);
I hope this helps. If you have additional questions, feel free to contact me.
Regards,
Nikolay
the Telerik team
Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items.
Hi,
thanks for your answer. Adding the new Telerik.WinControls.UI.TabIEShape(); solved the problem. I already tried this but I think I used the wrong class (something like TabIE7Shape). Now everything works fine.
Best regards
Martin
we also had this issue on Windows 7 64-bit machines; however we've moved on to the Office 2010 theme and I'm not certain it even exists as an issue at this point. We're also using the 2010.2.10.806 build.
Thank you for writing.
This code can be placed in form's constructor and it should work fine. However, I am not sure that I understand correctly, are you experiencing an issue. If this is the case please provide a detailed description and send us your project. We will be glad to help further.
I am looking forward to your reply.
Sincerely yours,
Stefan
the Telerik team
So for discussion sake, I've got assembly A that calls into assembly B to initialize the theme. Assembly B contains the embedded resource theme file. If I call this method (below) directly from within assembly B I will not need the OfficeShape object. However, if I call it via assembly A I will.
info:
Telerik 2011.3.11.1219
.Net 3.5
Public
Shared
Sub
InitTelerik()
If
m_telerikInitialized
Then
Return
Try
'Work around via http://www.telerik.com/community/forums/winforms/themes-and-visual-style-builder/theming-don-t-work-properly.aspx
'The following will avoid the above Telerik bug.
Dim
telerikPleaseHelpLoadTheTheme
As
New
Telerik.WinControls.UI.OfficeShape()
'Set the Telerik style theme at the application level
Telerik.WinControls.ThemeResolutionService.LoadPackageResource(cst_TelerikApplicationThemeResource)
Telerik.WinControls.ThemeResolutionService.ApplicationThemeName = cst_TelerikApplicationThemeName
m_telerikInitialized =
True
Catch
ex
As
Exception
LogWriter(ex)
End
Try
End
Sub
Thank you for writing.
The issue that was reported in this thread and resolved in Q2 2010 was an error message that appeared when you drop a theme component from our Toolbox to the form. The issue was caused by the fact that the theme contains shapes which are located in the Telerik.WinControls.UI assembly and this assembly was not automatically loaded when a theme component was dropped to the form. However, this now works fine and the UI assembly is loaded correctly.
Now to your case. The observed behavior is the expected behavior, because when you call this method from within project B (with the embedded theme), the UI assembly with the shapes in it is loaded, so such a call it not needed. However, when you call this method from project A, the assembly is not loaded and creating the office shape instance is needed since it will make the UI assembly load.
Attached you can find a sample project which demonstrates the easiest approach for this scenario.
Let me know if you have additional questions.
Kind regards,
Stefan
the Telerik team
Telerik.WinControls.ThemeResolutionService.LoadPackageResource
should be the on responsible for loading any dependent assemblies rather than throwing an exception. Would have saved me and others the trouble of interrupting their development to (hopefully) hunt down this thread and implement a work around. Just my 2c.
Eric
Thank you for your suggestion.
I will log it in our PITS system for a review and our dev team will decide whether such a functionality is possible and should be implemented. Here is a link to the PITS item, where you can add your vote for it and also you can track its status updates: http://www.telerik.com/support/pits.aspx#/public/winforms/9645.
I have updated your Telerik points for this feature request.
Kind regards,
Stefan
the Telerik team