WPF - 如何在选择行(在XAML中)时更改DataGrid列中的图像?

时间:2015-09-09 16:59:42

标签: wpf xaml datagrid

我们的项目有一个DataGrid,可以在其中一列中显示图像和文本。选择行时,由于它突出显示,因此图像无法正确显示。因此,我们只想更改所选行的图像 我知道如何使用<Style.Triggers>;更改dataGridCell的背景等属性,但无法弄清楚如何更改嵌入<DataGridTemplateColumn.CellTemplate>.内部的图片你能帮我解决这个问题吗?

            <DataGrid Name="dgCPAGrid" Grid.Row="2" Grid.Column="0" ItemsSource="{Binding CPAListDisplay, Mode=OneWay}" Margin="0,5,0,5" AutoGenerateColumns="False" 
                IsReadOnly="True" SelectionMode="Single"
                SelectedItem="{Binding SelectedCPA, Mode=TwoWay}"
                IsSynchronizedWithCurrentItem="False" AlternatingRowBackground="White" 
                HorizontalGridLinesBrush="Gray" VerticalGridLinesBrush="Gray" >
            <DataGrid.Resources>
                <Style x:Key="DGCellMGA" TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}">
                    <Setter Property="ToolTipService.IsEnabled" Value="False" />
                    <Setter Property="Background" Value="#f8f8d2" />
                    <Setter Property="TextBlock.TextAlignment" Value="Right"/>
                    <Style.Triggers>
                        <Trigger Property="DataGridCell.IsSelected" Value="True">
                            <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </DataGrid.Resources>
            <DataGrid.Columns>
                <DataGridTemplateColumn Header="{b:CaptionBinding gridHeaderCPAName}" Width="Auto" MinWidth="125">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                                <TextBlock Text="{Binding CPAName}" />
                                <Image Source="/Images/TimelineIconGreenTransparent.gif" Margin="5,0,0,0" Height="15" Width="15" Visibility="{Binding StaticInd, Converter={StaticResource BoolVisConv}, ConverterParameter=inverse, Mode=OneWay}"/>
                            </StackPanel>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                <DataGridTextColumn Header="{b:CaptionBinding gridHeaderCPAMGA}" Binding="{Binding MgaY1P}" MinWidth="50" Width="*" CellStyle="{StaticResource DGCellMGA}" />
            </DataGrid.Columns>
        </DataGrid>

1 个答案:

答案 0 :(得分:1)

在单元格的模板中,添加另一个侦听包含DataTrigger的{​​{1}}属性的触发器(这次是IsSelected)。在DataGridRow内,使用DataTrigger的{​​{1}}属性告诉它修改TargetName的{​​{1}}属性(你必须给它一个{ {1}}首先):

Setter