Hello!
I've tackled a similar situation on the site I'm working on now. I have a site-wide menu at the top of every page, and the menu needs to highlight the current page. For me, this amounts to putting a different css class on the menu link. For you, it sounds like you'll need to use a different image.
The approach I took was to create a user control for the menu. The user control contains a SiteMapDataSource and a Repeater control bound to it. The Repeater's ItemTemplate contains nothing more than a HyperLink control whose properties are bound to the properties of the SiteMap nodes that are returned by the SiteMapDataSource.
<asp:SiteMapDataSource ID="menuSiteMapDataSource" runat="server" ShowStartingNode="false" StartFromCurrentNode="false" StartingNodeOffset="0" />
<asp:Repeater ID="menuLinks" runat="server" DataSourceID="menuSiteMapDataSource">
<ItemTemplate>
<asp:HyperLink ID="menuLink" runat="server" NavigateUrl='<%# Eval("Url") %>' Text='<%# Eval("Title") %>' CssClass='<%# GetMenuLinkCssClass((SiteMapNode)Container.DataItem) %>'></asp:HyperLink>
</ItemTemplate>
</asp:Repeater>
Note, however, that the CssClass on the HyperLink control is bound to a method call, GetMenuLinkCssClass. This method's job is to determine if the SiteMapNode whose link is currently being built represents the page that is currently being displayed. The method takes a SiteMapNode as its only argument. You can see in the code above that I'm casting the data item that's being bound as a SiteMapNode and passing it into the method.
The GetMenuLinkCssClass method is pretty simple:
protected string GetMenuLinkCssClass(SiteMapNode node)
{
if (SiteMap.CurrentNode.Equals(node) || SiteMap.CurrentNode.IsDescendantOf(node))
return "current";
else
return "";
}
It uses the SiteMap api's CurrentNode property (which is a SiteMapNode representing the current page) and compares it with the SiteMapNode that was passed in as a parameter (which represents the current SiteMapNode being used to create a Hyperlink in the menu). If the CurrentNode is equal to the node that is being built in the menu or the CurrentNode is a descendant of the node being built in the menu, the method returns "current", which is the name of the CSS class that is used for the current menu item. Otherwise, it returns an empty string.
I'm thinking that you might be able to employ the same techniques to build a single user control to use for your menu, rather than using a different user control for each page.
Hope that helps!