January 27, 2012 09:45 by
Scott
I was doing some work with Silverlight the other week which involved using UserControls where the control named itself. That is, a situation such as;
<UserControl x:Name=”foo”>
<!—Content of control –>
</UserControl>
and, under unpredictable circumstances I was finding that I kept hitting a semi-random error when running my code which was something along the lines of;
“The name already exists in the tree: foo”
I spent an awfully long time on this and hence the blog post to try and perhaps save you some time in the future. I took long enough on it to come up with a simple repro scenario which looks something like this;
and so in words I have a ListBox which displays instances of UserControl1 and that control is just a StackPanel which contains 2 instances of UserControl2 and that control happens to name itself in its definition.
I found that if I ran this application a few times then sometimes it would work fine and sometimes it would fail with the dreaded exception and so I asked internally whether that was expected and it was confirmed as a bug in the Silverlight 4 runtime which has been fixed in Silverlight 5.
In my particular case, I could work around the bug anyway because I was naming that user control in order to use it for some bindings and the workaround I used was to create those bindings from code instead.