Silverlight -从部分中移除隐式样式
本文关键字:样式 Silverlight | 更新日期: 2023-09-27 18:06:04
我正在使用Silverlight工具包为我的整个应用程序设置样式。现在我需要从特定的部分中删除隐式样式,这样它就不会干扰该部分中的其他样式。
基本上我想这样做:
<theme:BureauBlackTheme>
<StackPanel x:Name="LayoutRoot">
<StackPanel><!-- Use the standard Bureau Black theme here --></StackPanel>
<StackPanel><!-- I don't want any implicit styling on this section --></StackPanel>
</StackPanel>
</theme:BureauBlackTheme>
查看Silverlight工具包的源代码,我发现主题是通过合并资源字典来应用的:
...
// Load the theme
ResourceDictionary resources = null;
using (stream)
{
resources = ResourceParser.Parse(stream, true);
owner.MergedDictionaries.Add(resources);
}
...
其中主题文件包含一堆隐式样式:
<!--ScrollBar-->
<Style TargetType="ScrollBar">
<Setter Property="MinWidth" Value="17" />
...
因此,我需要一种方法从特定的部分中删除所有隐式样式,但仅从该部分中删除。我之所以需要这个,是因为这些样式干扰了第三方控件的样式(我认为这与控件样式的优先级有关)。
这在Silverlight 4中可能吗?也欢迎变通方法。
提前感谢!
您能做的最好的事情就是缩短由SL Toolkit添加的隐式样式。例如,如果您添加如下的空样式:
<theme:BureauBlackTheme>
<StackPanel x:Name="LayoutRoot">
<StackPanel><!-- Use the standard Bureau Black theme here --></StackPanel>
<StackPanel>
<!-- I don't want any implicit styling on this section -->
<StackPanel.Resources>
<Style TargetType="ScrollBar" />
</StackPanel.Resources>
</StackPanel>
</StackPanel>
</theme:BureauBlackTheme>
则空Style将阻止应用主题的Style,因为一次只能应用1个隐式Style。不过,对于SL Toolkit支持的每种元素类型,您都必须这样做。
设置style属性为null
Style="{x:Null}"