2011-05-30 192 views
1

我有Infragistics XamDataGrid,并在其中,有几列显示数据的百分比。XamDataGrid字段值作为渐变背景

现在我希望这些列以百分比形式显示值,并将Background作为2色渐变显示,其中第1种颜色将绑定到百分比值,第2种颜色将显示左值。

解决此问题的方法是模板化cellvaluepresenter,通过它可以对单元格执行样式设置。

您可以使用TargetType =“{x:Type igDP:CellValuePresenter}”创建样式。

但是现在问题出现了,我该如何决定后端来的价值和根据价值来显示背景。

以下是验证码。在此代码中,当我在CellValuePresenterStyle中使用StaticResource时。绑定工作正常,但风格的转换器不被调用。当我在CellValuePresenterStyle中使用DynamicResource时,绑定中断,列中的值为空。

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

代码风格

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

谁能给这方面的任何解决办法。

感谢,

VJ

回答

1

上述代码中的所有内容都是正确的,只需使用下面的代码更改样式即可。

<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

我相信你可以创建两个转换器将计算梯度开始的颜色/停止键,并且将接受通过数据绑定百分比值。

+0

是的,我可以做到这一点。但是我应该绑定Field/Cell的哪个属性以使背景显示。 – 2011-05-30 06:52:33

+0

我已经实现了大部分的事情。只是我不能以价值为基础显示背景。你能告诉我解决它的办法吗?你的帮助将非常棒。 – 2011-05-30 09:08:12