如果选择了行,则更改DataGrid中按钮的背景 - WPF

时间:2015-07-06 11:56:23

标签: c# wpf button datagrid styles

我有一个datagrid,其中包含一个包含几个按钮的模板列。 选择行时,我需要这些按钮的颜色从黑色变为白色。 虽然我不确定如何才能达到" DataGridRow.IsSelected"来自按钮设定者。

以下是我尝试过但没有工作的内容:

        <DataGridTemplateColumn>
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <Button CommandParameter="{Binding RelativeSource={RelativeSource Mode=Self}, Path=DataContext}"
                                Command="{Binding ViewModel.OnRemoveDirectoryClick, ElementName=Root}">
                            <Button.Style>
                                <Style>
                                    <Setter Property="Button.Background">
                                        <Setter.Value>
                                            <ImageBrush ImageSource="../../Images/menu_delete.png"/>
                                        </Setter.Value>
                                    </Setter>
                                    <Style.Triggers>
                                        <Trigger Property="DataGridRow.IsSelected" Value="True">
                                            <Setter Property="Button.Background">
                                                <Setter.Value>
                                                    <ImageBrush ImageSource="../../Images/menu_delete_white.png"/>
                                                </Setter.Value>
                                            </Setter>
                                        </Trigger>
                                    </Style.Triggers>
                                </Style>
                            </Button.Style>
                        </Button>
                    </StackPanel>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

非常感谢, Yotam

2 个答案:

答案 0 :(得分:0)

尝试将此样式设为Resource

 <Style TargetType="{x:Type DataGridCell}">
    <Style.Triggers>
        <Trigger Property="DataGridCell.IsSelected"
                 Value="True">
            <Setter Property="Foreground" TargetName="YourButtonName"
                    Value="YourColor" />
        </Trigger>
    </Style.Triggers>
</Style>

答案 1 :(得分:0)

最终我发现我需要将DatatTrigger与DataGridRow的相对源一起使用

                                <Button.Style>
                                    <Style>
                                        <Setter Property="Button.Background">
                                            <Setter.Value>
                                                <ImageBrush ImageSource="../../Images/menu_delete.png"/>
                                            </Setter.Value>
                                        </Setter>
                                        <Style.Triggers>
                                            <DataTrigger Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}" Value="True">
                                                <Setter Property="Button.Background">
                                                    <Setter.Value>
                                                        <ImageBrush ImageSource="../../Images/menu_delete_white.png"/>
                                                    </Setter.Value>
                                                </Setter>
                                            </DataTrigger>
                                        </Style.Triggers>
                                    </Style>
                                </Button.Style>

我发现解决这个问题的另一个也许更优雅的方法是使用一个模板,其中包含带有白色填充的矩形,将按钮的背景作为不透明蒙版。

 <ControlTemplate x:Key="DataGridButtonTemplate" TargetType="{x:Type Button}">
    <Grid  Style="{x:Null}">
        <Rectangle x:Name="Mask" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" Opacity="{StaticResource NormalOpacity}" Style="{x:Null}"
                   OpacityMask="{TemplateBinding Background}" Fill="White" Visibility="{Binding Path=IsSelected, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}, Converter={StaticResource BoolToVisibilityConverter}}"/>
    </Grid>
</ControlTemplate>