Silverlight中的动态控制模板

时间:2009-04-25 06:57:26

标签: silverlight

我正在尝试在Silverlight中创建一个按钮,使用控件模板来改变它的外观。

我需要在代码中动态执行此操作(而不是xaml标记)。 Button对象具有Template属性,您可以为其分配ControlTemplate。

但是如何将UI元素填充到ControlTemplate中? (在WPF中,有一个VisualTree属性,但Silverlight中不存在这样的属性)

1 个答案:

答案 0 :(得分:2)

我不确定这是否有帮助,但以防万一。要在后面的代码中使用控件模板创建按钮(而不是XAML),我已经这样做了:

  1. 从xml定义加载控件模板(下面是指向源的链接)

        byte[] bytes = ReadBytesFromStream("BestBuyRemix.BL.buttontemplate.xml");
        string buttonTemplate = "";
        UTF8Encoding encoding = new UTF8Encoding();
        buttonTemplate = encoding.GetString(bytes.ToArray(), 0, (int)bytes.Length);
    
  2. 创建按钮并将其添加到可视化树(在本例中为包装面板)

  3. 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);
    

    我在博客上写了一篇关于Best Buy Remix API的帖子,该API使用它来在详细信息页面中构建产品列表。它有一个指向Silverlight源的链接。如果您有兴趣。
    blog post link