2010-12-10 23 views
0

J'ai un style dans mon Application.Resources:Silverlight: Pourquoi ce style fonctionne-t-il dans un endroit mais pas dans un autre?

<Style x:Name="TransparentBackground" TargetType="Border"> 
     <Setter Property="Background" Value="AntiqueWhite" /> 
     <Setter Property="Opacity" Value=".6" /> 
     <Setter Property="Padding" Value="5" /> 
    </Style> 

Je l'ai appliqué à deux endroits. Dans le premier, il fonctionne:

<UserControl.Resources> 
    <DataTemplate x:Key="FileTemplate"> 
      <Border Style="{StaticResource TransparentBackground}"> 
       <TextBlock TextWrapping="Wrap"> 
        <Run Text="{Binding Name, FallbackValue='File Name'}" FontWeight="Bold" /> 
        <Run Text="." Foreground="#787878" FontWeight="Light" /> 
        <Run Text="{Binding TypeExtension, FallbackValue='type'}" Foreground="#787878" FontWeight="Light" /> 
       </TextBlock> 
      </Border> 
    </DataTemplate> 
</UserControl.Resources> 

Quand je DataTemplate que est rendu, il ressemble beaucoup. Cependant, quand j'utilise le style au sein LayoutRoot, il échoue:

 <Border Style="{StaticResource TransparentBackground}"> 
      <TextBlock x:Name="searchResultsFoundCountText" /> 
     </Border> 

La couleur de fond est gris au lieu de AntiqueWhite, et l'opacité est 1 au lieu de .6. Cependant, le rembourrage semble fonctionner. Pourquoi cela pourrait-il se produire?

J'utilise Silverlight 4.

Répondre

0

Vous définissez les propriétés à l'aide de poseur de style. Ce chemin a une petite priorité (8ème place).

  1. Défini par la contrainte par le système de propriété.
  2. Défini par des animations actives ou des animations maintenues.
  3. Défini localement, soit par code, soit par définition directe en XAML, soit par liaison de données.
  4. Défini par le TemplatedParent.
  5. Style implicite: ceci s'applique uniquement à la propriété Style.
  6. Défini par les déclencheurs de style.
  7. Défini par les déclencheurs de modèle.
  8. Défini par Setters Style.
  9. Défini par le style par défaut.
  10. Défini par héritage.
  11. Définie par métadonnées

Mais vous avez un silverlight sans déclencheurs et votre code ne contient pas de modèles, donc une réponse possible peut être poseur de code (3) ou de l'animation (2).

Votre style fonctionne également bien dans le contrôle utilisateur racine MainPage.xaml.

Voici msdn article à propos de la propriété précitée.

+0

Je ne pense pas que je fasse quoi que ce soit à propos de # 8 dans cette liste. Mais je suppose que je vais vérifier plus à fond. Qu'est-ce que la «coercition par le système de la propriété» ou le «style implicite»? –

+0

J'ai joint le lien msdn avec des informations détaillées à ma réponse. 1er élément signifie "La coercition vous permet de contrôler la valeur finale qui est définie sur le DP via le CoerceValueCallback assigné dans PropertyMetaData du DP.C'est un moyen programmatique de contraindre la valeur du DP.". Le moyen le plus simple de vérifier une liaison est d'utiliser le code Background = "{Liative RelativeSource = {RelativeSource Self}, Path = Background, Convertisseur = {StaticResource SomeConverter}}" où le convertisseur ne fait rien, il est destiné à mettre un point d'arrêt à l'intérieur il. – vorrtex