So I encountered a bug today. A real-life, this-hasn’t-been-fixed-yet bug in Silverlight 2 Beta 2. And I gotta think it’s pretty common. After all of my posting on layout options, I think it’s my responsibility to mention this one. It is also documented on the Silverlight forums, but I want to make sure it’s shared here as well…
Much of what I am doing for my pet Silverlight 2 project requires me to show/hide different canvases, depending on which “page” you are on within my site. I’ve seen some Silverlight sites that are actually just different SL apps, and links actually take you to a seperate .aspx page for each one. I wanted to keep the user experience without any postbacks. All AJAX. No wavering from my page. Because of this, each navigation button just hides everything and shows the section it represents.
So each “page” is represented as a canvas. And for the simple example below, it works perfectly.
However, when your canvas contains elements that derive from Control, you don’t get the behavior you expect. Here’s my canvas with real stuff in it:
What I am finding is that my canvas just doesn’t show up. In my code, I know my syntax is correct, because it works for all of the simple canvases like the first one I showed. The moment I add a Button, TextBox, Radio Button, User Controls, etc. the Canvas no longer will change its Visibility property from Collapsed to Visible. This, it would seem, is a major problem. However, there’s a pretty simple workaround for this.
By making my base element for this function something other than a Canvas, it works perfectly. In my example, I have used a StackPanel, and just put my Canvas right inside it as the only element. In this example, all of the contents of my “page” will display as expected now.
Sure, it’s a little work-around-y, but it gets the job done until this bug is corrected.
Has anyone else encountered this? What was your solution?