質問

My DataGrid has a ContextMenu assigned which contains commands to do something with the selected row(s). That works fine already.

The problem is, every time the ContextMenu is opened (either by right mouse button or menu key), the DataGrid loses its focus and the selected row changes its background colour from blue to light grey. That's so much of a contrast that the user gets the impression that the selection is cleared and isn't sure if the context menu opens for the correct row.

That colour change is perfectly fine, a non-focused item should not have a focus colour. But opening a context menu just shouldn't trigger it.

Here's some XAML code:

<DataGrid
    HeadersVisibility="Column"
    HorizontalGridLinesBrush="#cccccc" VerticalGridLinesBrush="#cccccc"
    BorderBrush="#cccccc" Background="{x:Null}"
    CanUserReorderColumns="False" IsReadOnly="True"
    ItemsSource="{Binding MyItems, NotifyOnTargetUpdated=True}"
    AutoGenerateColumns="False"
    SelectionChanged="DataGrid_SelectionChanged">
    <DataGrid.Columns>
        <DataGridTextColumn .../>
        <DataGridTextColumn .../>
        <DataGridTextColumn .../>
    </DataGrid.Columns>
    <DataGrid.ContextMenu>
        <ContextMenu DataContext="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}">
            <MenuItem Header="Command text" Command="{Binding MyCommand}"/>
        </ContextMenu>
    </DataGrid.ContextMenu>
</DataGrid>

And the annotated screenshot of the issue:

Screenshot

How can I fix that?

役に立ちましたか?

解決

Since I just happened to have the same problem, I found the solution (for me) in another question on SO: Retain DataGrid IsSelectionActive when a ContextMenu opens in WPF?

I just copied the DataGridCell style into my code and it worked.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top