tags:

views:

1884

answers:

1

I'm trying to make a button in Silverlight use a control template to change the way it looks.

I need to do this dynamically in code (not xaml markup). The Button object has a Template property to which you can assign a ControlTemplate.

But how do you stuff UI elements into the ControlTemplate? (In WPF, there is a VisualTree property but no such property exists in Silverlight)

+1  A: 

I'm not sure if this helps, but just in case. To create buttons using a control template in code behind (not XAML) I've done it like this:

  1. load the control template from an xml definition (below is a link to the source)

        byte[] bytes = ReadBytesFromStream("BestBuyRemix.BL.buttontemplate.xml");
        string buttonTemplate = "";
        UTF8Encoding encoding = new UTF8Encoding();
        buttonTemplate = encoding.GetString(bytes.ToArray(), 0, (int)bytes.Length);
    
  2. create the button and add it to the visual tree (in this case a wrap panel)

string onebutton = string.Format(buttonTemplate, mnu.CatItemName, mnu.CatItemImage, "{StaticResource buttonStyle1}", "{StaticResource CatItemNameBlock}", "{StaticResource ThumbNailPreview}", ictr.ToString()); ictr += 1;

        Button bt = (Button)XamlReader.Load(onebutton);
        bt.Tag = mnu.CatItemPageUri;
        bt.Click += new RoutedEventHandler(bt_Click);

        Wrappable.Children.Add(bt);

I wrote a post on my blog about the Best Buy Remix API which uses this to build a product list in the details page. It has a link to the Silverlight source. In case you're interested.
blog post link

BPerreault