DataGrid選択時に、セルに配置したRadioButtonの文字色を変更したい


DataGridの行を選択した際に、選択行の背景色を青、文字色を白にしていますが、  
セルに配置しているradiobuttonの文字色も選択時に、白色に変更したいのですが  
なかなか良い方法がみつかりません。どなたか良い方法をご存じの方がいらっしゃいましたら  
教えて頂けないでしょうか？よろしくお願い致します。




`RelativeSource`を使用して`RadioButton`の上位にある`DataGridCell`や`DataGridRow`を参照すれば実現可能です。

例えば`DataGridCell.Foreground`には既定の文字色が反映されますので、これを`RadioButton.Foreground`にバインドすることが出来ます。

[code]

    <DataGridTemplateColumn>
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <RadioButton
                    Content="radio"
                    Foreground="{Binding RelativeSource={RelativeSource AncestorType=DataGridCell}, Path=Foreground}">
                </RadioButton>
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
    
[/code]

また`IsSelected`プロパティに`DataTrigger`を設定する方法でも実現できます。

[code]

    <DataGridTemplateColumn>
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <RadioButton
                    Content="radio">
                    <RadioButton.Style>
                        <Style
                            TargetType="RadioButton">
                            <Style.Triggers>
                                <DataTrigger
                                    Binding="{Binding RelativeSource={RelativeSource AncestorType=DataGridRow}, Path=IsSelected}"
                                    Value="True">
                                    <Setter
                                        Property="Foreground"
                                        Value="#fff" />
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </RadioButton.Style>
                </RadioButton>
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
    
[/code]




`RelativeSource`を使用して`RadioButton`の上位にある`DataGridCell`や`DataGridRow`を参照すれば実現可能です。

例えば`DataGridCell.Foreground`には既定の文字色が反映されますので、これを`RadioButton.Foreground`にバインドすることが出来ます。

[code]

    <DataGridTemplateColumn>
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <RadioButton
                    Content="radio"
                    Foreground="{Binding RelativeSource={RelativeSource AncestorType=DataGridCell}, Path=Foreground}">
                </RadioButton>
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
    
[/code]

また`IsSelected`プロパティに`DataTrigger`を設定する方法でも実現できます。

[code]

    <DataGridTemplateColumn>
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <RadioButton
                    Content="radio">
                    <RadioButton.Style>
                        <Style
                            TargetType="RadioButton">
                            <Style.Triggers>
                                <DataTrigger
                                    Binding="{Binding RelativeSource={RelativeSource AncestorType=DataGridRow}, Path=IsSelected}"
                                    Value="True">
                                    <Setter
                                        Property="Foreground"
                                        Value="#fff" />
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </RadioButton.Style>
                </RadioButton>
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
    
[/code]

