Цвет фона WPF DataGridTemplateColumn не изменяется в выбранной строке сетки данных - PullRequest
0 голосов
/ 04 мая 2018

У меня ниже WPF Toolkit DataGrid. Я создал пользовательский столбец, используя DataGridTemplateColumn, который содержит кнопку переключения (без текста).

Когда выбрана строка сетки данных, цвет фона кнопки переключения корректно изменяется на тот же цвет, что и выбор строки, но фон ячейки не меняет цвет, он остается белым. Почему?

Это внешний вид столбца DataGridTemplateColumn до и после выбора строки.

До: enter image description here

После того, как: enter image description here

Вот код:

<UserControl.Resources>        
    <ResourceDictionary>

        <!-- Body content datagrid cell vertical centering -->
        <Style x:Key="Body_Content_DataGrid_Centering" TargetType="{x:Type dg:DataGridCell}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type dg:DataGridCell}">
                        <Grid Background="{TemplateBinding Background}">
                            <ContentPresenter VerticalAlignment="Center" />
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ResourceDictionary>
</UserControl.Resources>

<!-- Other Stuff -->

<dg:DataGrid x:Name="MyDg"   
             ItemsSource="{Binding Path=ListOfItems}"
             Margin="3 5 5 5"
             AutoGenerateColumns="False"
             CanUserAddRows="False" CanUserResizeRows="False"
             SelectionMode="Single" 
             SelectedItem="{Binding Path=MySelectedItem}"
             ColumnWidth="*"
             AlternationCount="2" 
             Focusable="False" SelectionUnit="FullRow"
             CellStyle="{StaticResource Body_Content_DataGrid_Centering}">

    <dg:DataGrid.Columns>

        <dg:DataGridTemplateColumn Header="Selection" Width="Auto" CanUserResize="False">
            <dg:DataGridTemplateColumn.CellStyle>
                <Style TargetType="dg:DataGridCell">
                    <Setter Property="HorizontalAlignment"  Value="Center"/>
                </Style>
            </dg:DataGridTemplateColumn.CellStyle>
            <dg:DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ToggleButton Content="" IsChecked="{Binding Path=IsSelected}">
                        <ToggleButton.Template>
                            <ControlTemplate TargetType="{x:Type ToggleButton}">
                                <StackPanel Orientation="Horizontal">
                                    <Image MaxWidth="32" MaxHeight="32">
                                        <Image.Style>
                                            <Style>
                                                <Setter Property="Image.Source" Value="/My.Graphics;component/PNG/Unchecked.png" />
                                                <Style.Triggers>
                                                    <DataTrigger Binding="{Binding IsChecked, 
                                                                           RelativeSource={RelativeSource  Mode=FindAncestor, 
                                                                                           AncestorType={x:Type ToggleButton}}}" Value="True">
                                                        <Setter Property="Image.Source" Value="/My.Graphics;component/PNG/Checked.png" />
                                                    </DataTrigger>
                                                </Style.Triggers>
                                            </Style>
                                        </Image.Style>
                                    </Image>
                                 <!--   <ContentPresenter Content="{TemplateBinding Content}" Margin="0,0,0,0" />-->
                                </StackPanel>
                            </ControlTemplate>
                        </ToggleButton.Template>
                    </ToggleButton>
                </DataTemplate>
            </dg:DataGridTemplateColumn.CellTemplate>
        </dg:DataGridTemplateColumn>
     </dg:DataGrid.Columns>
</dg:DataGrid>

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Наконец, я решил, проблема заключалась в объявлении стиля для DataGridTemplateColumn.

Несмотря на то, что для фона кнопки переключения установлено значение «Прозрачный», он не работал, как предложил Равирадж.

Наконец, решение состояло в том, чтобы изменить часть кода относительно DataGridTemplateColumn:

<dg:DataGridTemplateColumn.CellStyle>
    <Style TargetType="dg:DataGridCell">
        <Setter Property="HorizontalAlignment"  Value="Center"/>
    </Style>
</dg:DataGridTemplateColumn.CellStyle>

К этому:

<dg:DataGridTemplateColumn.CellStyle>
    <Style TargetType="dg:DataGridCell">                                    
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type dg:DataGridCell}">
                    <Grid Background="{TemplateBinding Background}">                                                   
                        <ContentPresenter HorizontalAlignment="Center" />
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</dg:DataGridTemplateColumn.CellStyle>

Это работает.

Ниже результата.

Перед выбором строки:

enter image description here

После выбора строки:

enter image description here

0 голосов
/ 04 мая 2018

Установите цвет фона вашего шаблона столбца прозрачным.

Примерно так:

<DataTemplate>
    <ToggleButton Background="Transparent" Content="" IsChecked="{Binding Path=IsSelected}">
...