2011-05-30 5 views
1

J'ai Infragistics XamDataGrid et dans celui-ci, il y a quelques colonnes qui montrent les données en pourcentage.XamDataGrid Valeur du champ en tant que gradient Arrière-plan

Maintenant, je veux que ces colonnes affichent la valeur en pourcentage et en arrière-plan en tant que dégradé bicolore, dans lequel la première couleur serait liée au pourcentage et la deuxième couleur la valeur de gauche.

La solution de contournement pour ceci est Templating cellvaluepresenter, à travers lequel vous pouvez faire du style sur une cellule.

Vous pouvez créer un style avec TargetType = "{x: Type igDP: CellValuePresenter}". Mais maintenant la question se pose de savoir comment puis-je décider quelle valeur vient du backend et montrer l'arrière-plan sur la base de la valeur.

Voici le code. Dans ce code lorsque j'utilise StaticResource dans CellValuePresenterStyle. La liaison fonctionne correctement, mais le convertisseur dans le style n'est pas appelé. Lorsque j'utilise DynamicResource dans CellValuePresenterStyle, les interruptions de liaison et les valeurs de la colonne sont vides.

<igDP:XamDataPresenter x:Name="xamDataPresenter1" Height="300" DataSource="{Binding DV}" > 
     <igDP:XamDataPresenter.FieldLayoutSettings> 
      <igDP:FieldLayoutSettings AutoGenerateFields="True" HeaderPrefixAreaDisplayMode="FieldChooserButton" 
             /> 
     </igDP:XamDataPresenter.FieldLayoutSettings> 

     <igDP:XamDataPresenter.FieldLayouts> 
      <igDP:FieldLayout> 
       <igDP:FieldLayout.FieldSettings> 
        <igDP:FieldSettings CellClickAction="SelectCell" AllowEdit="False" /> 
       </igDP:FieldLayout.FieldSettings> 
       <igDP:FieldLayout.Fields> 
        <!--<igDP:UnboundField Name="ProductID" Label="Product ID" />--> 
        <igDP:Field Name="LocationID" DisallowModificationViaClipboard="True" > 
         <igDP:Field.Settings> 
          <igDP:FieldSettings CellValuePresenterStyle="{DynamicResource myCustomFieldCell}"/> 
         </igDP:Field.Settings> 
        </igDP:Field> 
        <!--You can add more Field objects here--> 
       </igDP:FieldLayout.Fields> 
      </igDP:FieldLayout> 
     </igDP:XamDataPresenter.FieldLayouts>   
    </igDP:XamDataPresenter> 

Code pour style

<local:StringToDoubleConverter x:Key="stringToDoubleConverter" /> 


    <Style x:Key="myCustomFieldCell" TargetType="{x:Type igDP:CellValuePresenter}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type igDP:CellValuePresenter}"> 
        <Grid>           
         <Border Panel.ZIndex="0" Width="{Binding ElementName=textBlock,Path=Text,Converter={StaticResource stringToDoubleConverter}}" HorizontalAlignment="Left"> 
          <Border.Background> 
           <LinearGradientBrush> 
            <GradientStop Color="Red" Offset="0" /> 
            <GradientStop Color="Transparent" Offset="1" /> 
            <GradientStop Color="White" Offset=".99" /> 
           </LinearGradientBrush> 
          </Border.Background> 
         </Border> 
          <TextBlock Panel.ZIndex="1" 
           Width="Auto" 
           Height="Auto" 
           Text="{TemplateBinding Content}"                   
           HorizontalAlignment="Center" 
           Margin="5,0,0,0"          
           VerticalAlignment="Center"         
           x:Name="textBlock" /> 
        </Grid>      
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

Quelqu'un peut-il donner une solution de contournement pour cela.

Merci,

VJ

Répondre

1

Tout dans le code ci-dessus est juste, il suffit de changer le style avec le code ci-dessous.

<Style x:Key="myCustomFieldCell" TargetType="{x:Type igDP:CellValuePresenter}"> 
     <Setter Property="OverridesDefaultStyle" Value="True"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type igDP:CellValuePresenter}"> 
        <Grid>        
         <ContentPresenter Panel.ZIndex="1"         
           Content="{TemplateBinding Content}"                  
           HorizontalAlignment="Center" 
           Margin="5,0,0,0"          
           VerticalAlignment="Center"         
           x:Name="contentPresenter" /> 
         <Border Panel.ZIndex="0" Width="{Binding ElementName=contentPresenter, Path=Content, Converter={StaticResource stringToDoubleConverter}}" HorizontalAlignment="Left"> 
          <Border.Background> 
           <LinearGradientBrush> 
            <GradientStop Color="Red" Offset="0" /> 
            <GradientStop Color="Transparent" Offset="1" /> 
            <GradientStop Color="White" Offset=".99" /> 
           </LinearGradientBrush> 
          </Border.Background> 
         </Border> 
        </Grid>       
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
0

je crois que vous pouvez créer deux qui calculera les convertisseurs la couleur des touches de démarrage gradient/arrêt, et acceptent la valeur de pourcentage par liaison de données.

+0

Oui, je peux le faire. Mais à quelle propriété de Field/Cell dois-je lier pour faire apparaître l'arrière-plan. –

+0

J'ai implémenté la plupart des choses. Juste je ne peux pas montrer l'arrière-plan sur la base de la valeur. Pouvez-vous me dire la solution de contournement pour cela? Votre aide sera très utile. –

Questions connexes