2009-08-26 11 views
1

J'ai un problème lorsque j'essaie de définir l'arrière-plan d'une grille dans une application Silverlight 3 sur un dégradé. Lorsque je définis l'arrière-plan d'une grille de mon application sur un dégradé, ce dégradé ne s'affiche pas dans le navigateur. J'ai défini cette brosse de dégradé comme une ressource (à la fois dans app.xaml et dans le fichier XAML local) et j'ai également essayé de coder directement la brosse de dégradé directement. J'ai fait les changements manuellement dans le XAML de VS et dans Expression Blend.Silverlight 3 - Gradient comme problème de fond - Bug?

Lorsque le chane est créé et que le fichier est affiché dans Blend, la couleur d'arrière-plan s'affiche correctement. Lorsque l'arrière-plan est défini sur une couleur unie (à la fois codée en dur et en tant que ressource), l'arrière-plan s'affiche correctement à la fois dans Expression et dans le navigateur. Ces deux choses me suggèrent que ce n'est pas un problème d'index z avec un rendu de contrôle au-dessus du contrôle en question.

Le XAML pour la brosse est:

<LinearGradientBrush x:Key="TestBrush" 
     EndPoint="0.5,1" 
     StartPoint="0.5,0"> 
    <GradientStop Color="#8DFFFFFF" 
      Offset="1" /> 
    <GradientStop Color="#E4FFFFFF" /> 
</LinearGradientBrush> 

Le XAML pour le réseau et son contenu est:

<Grid Margin="1,0,0,0" 
    Grid.Row="0" 
    VerticalAlignment="Top" 
    Height="49" Background="{StaticResource TestBrush}"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="2*" /> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="*" /> 
    </Grid.RowDefinitions> 
    <StackPanel Orientation="Horizontal" 
      Margin="0" 
      Grid.Column="0" 
      Grid.Row="0"> 
     <TextBlock Margin="0.125,1.5,1,1.5" 
      VerticalAlignment="Center">Code:</TextBlock> 
     <TextBox x:Name="SearchCodeTextBox" 
      Padding="1,0,0,0" 
      Margin="1,1.5,0,1.5" 
      Width="44" 
      Text="{Binding Mode=TwoWay, Path=CurrentTabularViewModel.SearchCode}" 
      TextWrapping="Wrap" 
      KeyUp="SearchCodeTextBox_KeyUp" /> 
     <StackPanel Margin="2,0"           
      Height="20" 
      Background="{StaticResource CP_Blue2}"> 
      <TextBlock MinWidth="200" /> 
     </StackPanel> 
     <Button Margin="10,1,0,1" 
      Content="Add Code" 
      Height="20" /> 
    </StackPanel> 
    <StackPanel Orientation="Horizontal" 
      Margin="35,0,0,0" 
      Grid.Row="1" 
      Grid.Column="0"> 
     <Button Margin="0" 
      Width="24" 
      Content="<" 
      Height="20" 
      VerticalContentAlignment="Top" /> 
     <Button Margin="2,0" 
      Content="Tabular" 
      Height="20" 
      Width="Auto" 
      HorizontalAlignment="Stretch" 
      commands:Click.Command="{Binding Path=CurrentTabularViewModel.SearchCommand}" 
      commands:Click.CommandParameter="{Binding Path=SelectedSessionType}" /> 
     <Button Content=">" 
      Width="24" 
      Margin="2,0" 
      Height="20" /> 
     <Button Content="Instructional Notes" 
      Width="Auto" 
      Margin="30,0,2,0" 
      Height="20" /> 
    </StackPanel> 
</Grid> 

Toute pensée?

+0

Wow ... Je viens de faire un essai. Vous avez raison ... pas de fond! –

Répondre

2

OK, alors voici l'affaire. Ce n'est pas un bug, du moins pas pour Silverlight! C'est un bug de la part du développeur!

Si vous regardez de plus près le gradient utilisé dans la ressource, seules les deux premières valeurs hexadécimales changent (voir ci-dessous). C'est, bien sûr, le canal Alpha, avec tous les F suivants, je vais juste d'un niveau de transparence à un autre.

<LinearGradientBrush x:Key="TestBrush" 
     EndPoint="0.5,1" 
     StartPoint="0.5,0"> 
    <GradientStop Color="#8DFFFFFF" 
       Offset="1" /> 
    <GradientStop Color="#E4FFFFFF" /> 
</LinearGradientBrush> 

Maintenant, ce becuase est un composant qui est injecté dans une page plus grande, l'arrière-plan est défini par la plus grande page. Donc, dans Blend, l'arrière-plan est l'arrière-plan de BLEND, qui est une couleur grise, ce qui donne l'impression que le tout a un dégradé de gris dans Blend, mais il est simplement blanc avec différents niveaux de transparence. Lorsque le contrôle est injecté dans la page principale qui a un fond blanc, vous ne pouvez pas le voir.

Alors, quelle est la morale de cette histoire? Faites attention à la couleur avec laquelle vous travaillez!