2011-07-14 23 views
6

o element ağacındaki bulundukları yere göre stil HTML öğelerinin mümkündür:WPF'de konum tabanlı stil mümkün mü? BB'de

div#container div#menu a 

Bir menü bölümünde sadece bağlantılar tarz böylece WPF aynı şeyi istiyoruz.

  • Soru # 1: Öyle ya da böyle, WPF de yukarıdaki mümkün mü?

Bir StatusBar iç içe Separatörler aşağıdaki düşünüyordum:

<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 parçacığı, kaynak sözlükte dahildir. StatusBar, şeffaf bir arka plan ve doğru dolgu ile gösterilir. Ancak, yeşil ayırıcı maalesef görüntülenmiyor. Sadece varsayılan gri 1px geniş çubuğu gösterir.

  • Soru 2: Bu doğru çözüm ise, bu işe yaramazsa neden kimse bilir?

Şimdiden teşekkürler.

+0

Stilin Kaynaklarının stilin tanımlandığı türe dönüştürülmediğini söyleyebilirim, bu kaynaklar stil örneğinin kendisinde belirtilir. – Will

+0

Evet, burada aradığımız şeyin, stilin uygulandığı öğenin "Kaynaklar" özelliği olan stil için bir "Ayarlayıcı" olduğunu hayal ediyorum. Her nasılsa ... 'un çalışacağını düşünmüyorum. Bu muhtemelen bir kod çözümü gerektirir. –

cevap

0

bir göz atın Ben CSS seçici motoru (Fizzler) nereye götürdüğünü bir blog bir süre önce yazılan yazdım ve WPF için uygulamasıyla:

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

Size CSS seçicileri kullanmasına izin verir öğeleri hedefleyin ve stilleri onlara uygulayın. Ayrıca stilleri birleştirir, böylece birden fazla CSS seçicisinin eşleşmesi durumunda, her birinin stilleri bir araya getirilir. bir cevap kendim tökezledi

<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

Temiz bir çözüm. Ancak, kodu bu sefer çok karmaşık yapamazsınız ... –