我正在尝试在Silverlight中创建一个按钮,使用控件模板来改变它的外观。
我需要在代码中动态执行此操作(而不是xaml标记)。 Button对象具有Template属性,您可以为其分配ControlTemplate。
但是如何将UI元素填充到ControlTemplate中? (在WPF中,有一个VisualTree属性,但Silverlight中不存在这样的属性)
答案 0 :(得分:2)
我不确定这是否有帮助,但以防万一。要在后面的代码中使用控件模板创建按钮(而不是XAML),我已经这样做了:
从xml定义加载控件模板(下面是指向源的链接)
byte[] bytes = ReadBytesFromStream("BestBuyRemix.BL.buttontemplate.xml");
string buttonTemplate = "";
UTF8Encoding encoding = new UTF8Encoding();
buttonTemplate = encoding.GetString(bytes.ToArray(), 0, (int)bytes.Length);
创建按钮并将其添加到可视化树(在本例中为包装面板)
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