WPF Datatrigger для DataGrid изменяет только всю строку - PullRequest
2 голосов
/ 22 июля 2010

У меня есть DataGrid с настройкой DataTrigger, поэтому, когда его значение равно «UP», я бы хотел, чтобы триггер изменял только фон в столбце данных 'directionColumn'.

То, что у меня есть, обновляет всю строку.Я также попытался поместить 'targetname' в элемент setter, но это просто выдает ошибку.Пожалуйста, помогите.

XAML:

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding}" Name="summaryReportDataGridDATE" RowDetailsVisibilityMode="VisibleWhenSelected" Width="330">
    <DataGrid.CellStyle>
        <Style TargetType="DataGridCell">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=Direction}" Value="UP">
                    <Setter>
                        <Setter.Property>Background</Setter.Property>
                        <Setter.Value>Red</Setter.Value>
                    <!--<Setter Property="Background" Value="Red" TargetName="directionColumn"/>-->
                    </Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.CellStyle>
    <DataGrid.Columns>
        <!--<DataGridTemplateColumn x:Name="dateColumn" Header="Date" Width="100" CanUserReorder="False" CanUserSort="False" FontFamily="Arial Rounded MT" >
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <DatePicker SelectedDate="{Binding Path=Date, Mode=OneWay}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>-->

        <DataGridTextColumn x:Name="dateColumn" Binding="{Binding Path=Date, StringFormat={}{0:dd/MM/yyyy}}" Header="Date"  Width="80" CanUserReorder="False" CanUserSort="False" FontFamily="Arial Rounded MT"/>
        <DataGridTextColumn x:Name="closeColumn" Binding="{Binding Path=ClosingPrice}" Header="ClosingPrice" Width="80" CanUserReorder="False" CanUserSort="False" FontFamily="Arial Rounded MT" />
        <DataGridTextColumn x:Name="directionColumn" Binding="{Binding Path=Direction}" Header="Direction"  Width="80" CanUserReorder="False" CanUserSort="False" FontFamily="Arial Rounded MT" />
        <DataGridTextColumn x:Name="resultColumn" Binding="{Binding Path=Result}" Header="Result"  Width="80" CanUserReorder="False" CanUserSort="False" FontFamily="Arial Rounded MT"  />
    </DataGrid.Columns>
</DataGrid>

1 Ответ

6 голосов
/ 23 июля 2010

Как насчет TemplateColumn вместо пользовательского стиля ячейки:

    <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding}" Name="summaryReportDataGridDATE" RowDetailsVisibilityMode="VisibleWhenSelected" Width="330">                       
        <DataGrid.Columns>
            <DataGridTextColumn x:Name="dateColumn" Binding="{Binding Path=Date, StringFormat={}{0:dd/MM/yyyy}}" Header="Date"  Width="80" CanUserReorder="False" CanUserSort="False" FontFamily="Arial Rounded MT"/>
            <DataGridTextColumn x:Name="closeColumn" Binding="{Binding Path=ClosingPrice}" Header="ClosingPrice" Width="80" CanUserReorder="False" CanUserSort="False" FontFamily="Arial Rounded MT" />
            <DataGridTemplateColumn x:Name="directionColumn" Header="Direction"  Width="80" CanUserReorder="False" CanUserSort="False" >
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock x:Name="directionColumnTextBlock" Text="{Binding Path=Direction}" Width="80" FontFamily="Arial Rounded MT"/>
                        <DataTemplate.Triggers>
                            <DataTrigger Binding="{Binding Path=Direction}" Value="UP">
                                <Setter TargetName="directionColumnTextBlock" Property="Background" Value="Red" />
                            </DataTrigger>
                        </DataTemplate.Triggers>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>                                                                              
            <DataGridTextColumn x:Name="resultColumn" Binding="{Binding Path=Result}" Header="Result"  Width="80" CanUserReorder="False" CanUserSort="False" FontFamily="Arial Rounded MT"  />
        </DataGrid.Columns>
    </DataGrid>
...