2011-07-14 20 views
6

En CSS es posible elementos HTML de estilo en función de su ubicación en el árbol de elementos:¿Estilo basado en ubicación en WPF posible?

div#container div#menu a 

me gustaría hacer lo mismo en WPF, por lo que sólo los eslabones de una sección del menú son de estilo.

  • Pregunta # 1: De un modo u otro, es lo anterior también es posible en WPF?

estaba pensando acerca de lo siguiente para los separadores anidados en una barra de estado:

<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> 

Esta pieza de XAML se incluye en un diccionario de recursos. El StatusBar aparece con un fondo transparente y un relleno correcto. Sin embargo, el separador verde desafortunadamente no se muestra. Simplemente muestra la barra gris predeterminada de 1px.

  • Pregunta # 2: Si esta es la solución correcta, nadie sabe por qué esto no funciona?

Gracias de antemano.

+0

Puedo decirte que los recursos del estilo no están traducidos al tipo que se define el estilo, estos recursos tienen un alcance para la instancia de estilo en sí. – Will

+0

Sí, imagino que lo que estamos buscando aquí es un "Setter" para el estilo cuya propiedad es la propiedad "Resources" del elemento al que se aplica el estilo. De alguna manera, no creo que funcione .... Esto probablemente requiera una solución de código. –

Respuesta

0

escribí una entrada de blog hace un tiempo donde tomé un motor selector CSS (Fizzler) y lo aplicó a WPF:

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

Se permite el uso de selectores CSS para elementos de destino y aplicar estilos a ellos. También combina estilos para que, si coinciden varios selectores de CSS, los estilos de cada uno se fusionen.

Véase el siguiente ejemplo:

<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> 
+0

Debe decir, solución ordenada. Sin embargo, no puedo hacer que el código sea demasiado complejo esta vez ... –

Cuestiones relacionadas