【问题标题】:XamDataGrid Field value as gradient BackgroundXamDataGrid 字段值作为渐变背景
【发布时间】:2011-05-30 05:28:52
【问题描述】:

我有 Infragistics XamDataGrid,其中有几列以百分比显示数据。

现在我希望这些列将值显示为百分比,并将背景显示为 2 色渐变,其中第一种颜色将绑定到百分比值,而第二种颜色将剩余值。

解决方法是模板化 cellvaluepresenter,您可以通过它对 Cell 进行样式设置。

您可以使用 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>

任何人都可以为此提供任何解决方法。

谢谢,

主播

【问题讨论】:

    标签: mvvm wpf-controls infragistics xamdatagrid


    【解决方案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>
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 是的,我可以做到。但是我应该绑定到 Field/Cell 的哪个属性以使背景出现。
      • 我已经实现了大部分内容。只是我不能根据价值显示背景。你能告诉我解决方法吗?您的帮助将非常重要。
      猜你喜欢
      • 2022-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-31
      • 2011-03-15
      • 2012-12-31
      相关资源
      最近更新 更多