简体   繁体   English

使用上下文菜单时如何更改数据网格 WPF C# 中选定行的字体颜色

[英]How to change font color of selected row in datagrid WPF C# when using context menu

I am developing a WPF Application using Mahapps.Metro library.我正在使用 Mahapps.Metro 库开发 WPF 应用程序。

There is a DataGrid where I want to use a ContextMenu on the added rows, for that I am defining this in datagrid resources有一个 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>

and adding that context menu in the rowstyle并在行样式中添加该上下文菜单

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

The problem with this is that when user clicks on the row, it seems to disappear (the font color turns white).这样做的问题是,当用户单击该行时,它似乎消失了(字体颜色变为白色)。 I tried adding the following to the rowstyle but it does not seems to work.我尝试将以下内容添加到行样式中,但似乎不起作用。

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

MY last option is to use the contextmenu in the grid instead rows, but I want to know if there is something I can do to make this work.我的最后一个选择是使用网格中的上下文菜单而不是行,但我想知道是否有什么我可以做的事情来完成这项工作。 Hope you can help, thanks.希望你能帮忙,谢谢。

You should use based-on feature on your defined style:您应该在定义的样式上使用基于功能:

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

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

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