如何替换第三方UserControl的ResourceDictionary(在本例中为PivotViewer)

时间:2010-09-16 03:19:10

标签: silverlight silverlight-4.0 pivotviewer

SilverLight 4的当前版本的Microsoft Live Labs PivotViewer控件无法设置控件元素的样式。看一下Reflector中的控件,我可以看到很多样式信息都是在程序集中的ResourceDictionary中设置的(assets / defaultcolors.xaml)。我想要做的是创建我自己的这个文件的副本,然后在运行时在PivotViewer控件上替换它。

通过继承PivotViewer控件并覆盖OnApplyTemplate,我可以获取子元素并设置背景等属性。我没有成功Clear()使用MergedDictionaries并添加我自己的:

public override void OnApplyTemplate() {
base.OnApplyTemplate();

/* can change things this way */
CollectionViewerView cvv = ((CollectionViewerView)((Grid)this.GetTemplateChild("PART_Container")).Children[0]);
((Grid)cvv.Content).Background = new SolidColorBrush(Colors.Black);

/* can't change things this way */
CustomDictionary gd = new CustomDictionary();
cvv.Resources.MergedDictionaries.Clear();
cvv.Resources.MergedDictionaries.Add(gd);

}

1 个答案:

答案 0 :(得分:0)

我担心这不会在Silverlight中起作用,因为它只使用静态资源。 (Styles Don't Update

更改资源字典仅在调用InitializeComponent()之前有效,该调用在PivotViewer的构造函数中调用。

我一直在试图调整PivotViewer控件的样式。我希望除了搜索Visual Tree和更改属性之外还有另一种方法。