Silverlight - 从节中删除隐式样式

时间:2011-08-19 18:24:43

标签: c# silverlight xaml styles silverlight-toolkit

我正在使用Silverlight 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>
    </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" />
    ...

因此,我需要一种方法来删除特定部分中的所有隐式样式,但只能从该部分中删除。我需要这个的原因是因为这些样式干扰了第三方控件的样式(我认为这与precedence of the control styles有关。)

这可以在Silverlight 4中使用吗?也欢迎变通方法。

提前致谢!

2 个答案:

答案 0 :(得分: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>

然后空样式将阻止应用主题样式,因为一次只能应用1个隐式样式。您必须为SL Toolkit支持的每种元素类型执行此操作。

答案 1 :(得分:1)

将style属性设置为null

Style="{x:Null}"