It’s a very common scenario to create a site definition with pages, features, lists, web parts…etc
I have tried to change the web part icon as per the information in MSDN page, by using the “ImageUrl” property, but this didn’t work.
<View List="$Resources:core,lists_Folder;/Discussions" ImageUrl=”/_layouts/????????.png” BaseViewID="0" WebPartZoneID="Left" Name="$Resources:Strings,List_Instance_Title_Discussions_Forum;" WebPartOrder="1" ShowHeaderUI="True"/>
So I decided to catch the webpart and set the ImageUrl programmatically. So the only way to do this is to implement this in the FeatureActivated event in the FeatureReceiver class.
1: public override void FeatureActivated(SPFeatureReceiverProperties properties)
2: {
3: base.FeatureActivated(properties);
4: SetWebPartIcon(properties)
5: }
6:
7: private static void SetWebPartIcon(SPFeatureReceiverProperties properties)
8: {
9: try
10: {
11: SPSecurity.RunWithElevatedPrivileges(() =>
12: {
13: SPWeb site = properties.Feature.Parent as SPWeb;
14: SPLimitedWebPartManager webPartManager =
15: site.GetLimitedWebPartManager(site.ServerRelativeUrl + "/default.aspx", PersonalizationScope.Shared);
16: SPLimitedWebPartCollection webParts = webPartManager.WebParts;
17: if (webParts != null && webParts.Count > 0)
18: {
19: foreach (System.Web.UI.WebControls.WebParts.WebPart webPart in webParts)
20: {
21: if (string.Compare(webPart.Title, "Web Part Name", false) == 0)
22: {
23: // Set the Image URL
24: webPart.TitleIconImageUrl = "*****";
25: webPartManager.SaveChanges(webPart);
26: }
27: }
28: }
29: });
30: }
31: catch (Exception ex)
32: {
33: // Catch the Exception
34: }
35: }