Стиль кнопки в выбранной строке в WPF DataGrid - PullRequest
1 голос
/ 12 августа 2011

Кажется, что это должно быть просто, но я не могу этого сделать ... У меня есть таблица данных со столбцом шаблона, который включает кнопку:

<DataGridTemplateColumn.CellTemplate>
   <DataTemplate>
       <StackPanel Orientation="Horizontal">
           <Button Style="{StaticResource LinkButton}" Content="{Binding Path=...}"/>
       </StackPanel>
   </DataTemplate>
</DataGridTemplateColumn.CellTemplate>

и мой стиль кнопки ссылки выглядит так:

<Style x:Key="LinkButton" TargetType="Button">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <ControlTemplate.Resources>
                    <Style TargetType="{x:Type TextBlock}">
                        <Setter Property="TextDecorations" Value="Underline" />
                    </Style>
                </ControlTemplate.Resources>
                <ContentPresenter />
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="Foreground" Value="Blue" />
    <Setter Property="Cursor" Value="Hand" />
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="true">
            <Setter Property="Foreground" Value="Red" />
        </Trigger>
    </Style.Triggers>
</Style>

Когда строка выбрана, я хочу изменить цвет переднего плана кнопки ссылки на белый или что-то в этом роде. Есть ли простой способ сделать это?

1 Ответ

4 голосов
/ 12 августа 2011
<Style.Triggers>
    <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType=DataGridRow}}"
                 Value="True">
          <Setter Property="TextElement.Foreground" Value="White"/>
    </DataTrigger>
    <!-- Here be your other trigger, order matters, if it is the other way around the above trigger overrides your mouse-over trigger -->
</Style.Triggers>

Или что-то в этом роде ...

( Кстати, как насчет использования DataGridHyperlinkColumn или, по крайней мере, просто обычного Hyperlink вместо Button )

...