簡體   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