WPF中基于位置的样式可能吗?

时间:2011-07-14 13:37:19

标签: .net wpf xaml resources styling

在CSS中,可以根据HTML元素在元素树中的位置设置样式:

div#container div#menu a

我想在WPF中执行相同操作,以便只对菜单部分中的链接进行样式设置。

  • 问题#1:在WPF中也可以采用上述方法吗?

我正在考虑嵌套在StatusBar中的Separators的以下内容:

<Style TargetType="{x:Type StatusBar}">
    <Setter Property="Background" Value="Transparent" />
    <Setter Property="Padding" Value="0,0,20,0" />
    <Style.Resources>
        <Style TargetType="{x:Type Separator}">
            <Setter Property="Width" Value="20" />
            <Setter Property="Background" Value="Green" />
        </Style>
    </Style.Resources>
</Style>

这段XAML包含在资源字典中。 StatusBar显示透明背景和正确的填充。但是,遗憾的是绿色分隔符不显示。它只显示默认的灰色1px宽条。

  • 问题2:如果这是正确的解决方案,任何人都知道为什么这不起作用?

提前致谢。

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

自己偶然发现了一个答案。我提到的代码对于每种情况都是正确的,除了分隔符。 Separator元素应使用特定键设置样式,详细说明如下:http://devlicio.us/blogs/christopher_bennage/archive/2008/06/19/styling-separators-in-wpf.aspx

答案 2 :(得分:0)

我在一段时间后写了一篇博客文章,我带了一个CSS选择器引擎(Fizzler)并将其应用到WPF:

http://www.scottlogic.co.uk/blog/colin/2009/03/using-css-selectors-for-styling-in-wpf/

它允许您使用CSS选择器来定位元素并将样式应用于它们。它还合并样式,以便在多个CSS选择器匹配时,将每个样式的样式合并在一起。

请参阅以下示例:

<css:StyleSheet x:Key="cssStyles">
    <css:StyleSheet.Rules>

        <css:StyleRule Selector=".form Grid *" SelectorType="LogicalTree">
            <css:StyleRule.DeclarationBlock>
                <css:StyleDeclarationBlock>
                    <css:StyleDeclaration Property="Margin" Value="4,4,4,4"/>
                </css:StyleDeclarationBlock>
            </css:StyleRule.DeclarationBlock>
        </css:StyleRule>

        <css:StyleRule Selector=".form TextBlock.mandatory">
            <css:StyleRule.DeclarationBlock>
                <css:StyleDeclarationBlock>
                    <css:StyleDeclaration Property="Foreground" Value="Red"/>
                </css:StyleDeclarationBlock>
            </css:StyleRule.DeclarationBlock>
        </css:StyleRule>

        <css:StyleRule Selector="Border.form">
            <css:StyleRule.DeclarationBlock>
                <css:StyleDeclarationBlock>
                    <css:StyleDeclaration Property="BorderThickness" Value="2"/>
                    <css:StyleDeclaration Property="BorderBrush" Value="Black"/>
                    <css:StyleDeclaration Property="CornerRadius" Value="5"/>
                    <css:StyleDeclaration Property="Margin" Value="10,10,10,10"/>
                </css:StyleDeclarationBlock>
            </css:StyleRule.DeclarationBlock>
        </css:StyleRule>

        <css:StyleRule Selector=".form .title">
            <css:StyleRule.DeclarationBlock>
                <css:StyleDeclarationBlock>
                    <css:StyleDeclaration Property="HorizontalAlignment" Value="Stretch"/>
                    <css:StyleDeclaration Property="HorizontalContentAlignment" Value="Center"/>
                    <css:StyleDeclaration Property="Background" Value="DarkBlue"/>
                    <css:StyleDeclaration Property="Foreground" Value="White"/>
                    <css:StyleDeclaration Property="FontSize" Value="13"/>
                    <css:StyleDeclaration Property="Padding" Value="3,3,3,3"/>
                    <css:StyleDeclaration Property="FontWeight" Value="Bold"/>
                </css:StyleDeclarationBlock>
            </css:StyleRule.DeclarationBlock>
        </css:StyleRule>

    </css:StyleSheet.Rules>
</css:StyleSheet>