So, as promised, here is the followup to what I was doing with Silverlight reflection that made me need access to Internal members of a class.
Localization in Silverlight is still an interesting story and everybody seems to have their own way of doing it. The client I’m on uses Excel spreadsheets that load into a database. The localization data then pulls when a usercontrol loads and changes the controls data based on the locale and what was in the database.
This was very tedious for developers to setup. You would create your UI and then have to go back and pull the default text for your controls and add them all to the spreadsheet.
Using reflection I can create an instance of all the user controls in my assembly and display them to the user in a listbox. From there, when they select a user control, I can reflect on that type and display all the controls defined in the UserControl to the user. When you define a control in xaml and give it a name, it becomes an internal member of a partial class generated by Visual Studio.
So, what I do is when you are all done with your UserControl you simply run my tool on the assembly and it reflects through and shows all the UserControls. When you select one, it uses reflection to create an instance with the default constructor, which initializes all your controls properties.
From there I grab all the controls through reflection and use some logic to get which properties of each I want to localize. For TextBlocks I grab the Text property, for ContentControls it’s the Content property, and so on.
Using that I generate a simple tab-delimited string with all the default localization for all the controls and the user can copy/paste right into Excel and move on to their next task and let someone else do the translating/localizing for them.