c# - Silverlight-从部分中删除隐式样式

原文 标签 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有可能吗?也欢迎变通方法。

提前致谢!

最佳答案

最好的办法是短路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工具包支持的每种元素类型执行此操作。

相关文章:

c# - Quartz.net的Unity LifeTime Manager

c# - 使用Google API for .NET访问用户信息

c# - Windows-Phone-7:检查是否正在播放soundEffectInstance的实例

c# - 使用Material Design时更改ListViewItem背景颜色

c# - 如何处理KeyRoutedEventArgs e中VirtualKey枚举的缺失值

c# - 如何将文件夹级别的文档添加到C#程序集?

c# - 如何在列表框中显示文件名,但如何使用openfiledialog保持相对路径?

silverlight - 我应该在Silverlight项目中使用Model-View-ViewModel(MVVM)模式吗?

c# - 访问应用程序成员?

c# - 找不到绑定到ListBox的导入命名空间中的枚举