Значение поля XamDataGrid в качестве градиента фона - PullRequest
1 голос
/ 30 мая 2011

У меня есть Infragistics XamDataGrid, и в нем есть несколько столбцов, которые показывают данные в процентах.

Теперь я хочу, чтобы эти столбцы отображали значение в процентах, а Фон в виде 2-цветного градиента, в котором 1-йцвет будет привязан к процентному значению, а 2-й цвет - к оставшемуся значению.

Обходным путем для этого является Templating cellvaluepresenter, с помощью которого можно выполнять стилизацию для ячейки.

Вы можетесоздайте стиль с помощью TargetType = "{x: Type igDP: CellValuePresenter}".

Но теперь возникает вопрос: как я могу решить, какое значение исходит из серверной части, и показать фон на основе значения.

Ниже приведен код.В этом коде, когда я использую StaticResource в CellValuePresenterStyle.Привязка работает нормально, но конвертер в стиле не вызывается.Когда я использую DynamicResource в CellValuePresenterStyle, разрывы привязки и значения в столбце будут пустыми.

<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

Ответы [ 2 ]

1 голос
/ 31 мая 2011

Все в приведенном выше коде правильно, просто измените стиль с помощью приведенного ниже кода.

<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 голосов
/ 30 мая 2011

Я полагаю, что вы можете создать два преобразователя, которые будут вычислять цвет клавиш запуска / остановки градиента и принимать процентное значение посредством привязки данных.

...