繁体   English   中英

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

[英]Changing the background of a button in a DataGrid if the row is selected - WPF

我有一个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

尝试将此样式作为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>

最终,我发现我需要使用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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM