首页 > 解决方案 > 使用上下文菜单时如何更改datagrid WPF C#中选定行的字体颜色

问题描述

我正在使用 Mahapps.Metro 库开发 WPF 应用程序。

有一个 DataGrid,我想在添加的行上使用 ContextMenu,因为我在 datagrid 资源中定义它

<DataGrid.Resources>
    <ContextMenu x:Key="RowMenu" 
        DataContext="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}">
        <MenuItem Header="Borrar detalle" Click="delete_Click" />
        <MenuItem Header="Editar detalle" Click="edit_Click" />
    </ContextMenu>
</DataGrid.Resources>

并在行样式中添加该上下文菜单

<DataGrid.RowStyle>
    <Style TargetType="DataGridRow" >
        <Setter Property="ContextMenu" Value="{StaticResource RowMenu}" />
    </Style>
</DataGrid.RowStyle>

这样做的问题是,当用户单击该行时,它似乎消失了(字体颜色变为白色)。我尝试将以下内容添加到行样式中,但似乎不起作用。

 <DataGrid.RowStyle>
    <Style TargetType="DataGridRow" >
        <Setter Property="ContextMenu" Value="{StaticResource RowMenu}" />
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="BorderBrush" Value="LightSkyBlue"/>
                <Setter Property="Foreground" Value="Black"/>
                <Setter Property="Background" Value="LightSkyBlue"/>
            </Trigger>
            <Trigger Property="IsMouseOver" Value="False">
                <Setter Property="BorderBrush" Value="Transparent"/>
                <Setter Property="Foreground" Value="Black"/>
                <Setter Property="Background" Value="Transparent"/>
            </Trigger>
            <Trigger Property="IsSelected" Value="True">
                <Setter Property="BorderBrush" Value="Transparent"/>
                <Setter Property="Foreground" Value="Black"/>
                <Setter Property="Background" Value="Transparent"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</DataGrid.RowStyle>

我的最后一个选择是使用网格中的上下文菜单而不是行,但我想知道是否有什么我可以做的事情来完成这项工作。希望你能帮忙,谢谢。

标签: c#wpfdatagridcontextmenu

解决方案


您应该在定义的样式上使用基于功能:

<DataGrid.RowStyle>
<Style TargetType="DataGridRow" BasedOn="{StaticResource {x:Type DataGridRow}}">
    <Setter Property="ContextMenu" Value="{StaticResource RowMenu}" />
</Style>
</DataGrid.RowStyle>

推荐阅读