So the solution turned out to be creating an FTableRowStyle and applying it from the style sheet, like this:
FSlateColor InvertedForeground = FLinearColor( 0, 0, 0 );
FSlateColor SelectorColor = FLinearColor( 0.4f, 0.4f, 0.4f );
FSlateColor SelectionColor = FLinearColor(0.4f, 0.4f, 0.4f );
FSlateColor SelectionColor_Inactive = FLinearColor( 0.25f, 0.25f, 0.25f );
FSlateColor SelectionColor_Pressed = FLinearColor( 0.f, 0.f, 1.f );
FTableRowStyle NormalTableRowStyle = FTableRowStyle()
.SetEvenRowBackgroundBrush( FSlateNoResource() )
.SetEvenRowBackgroundHoveredBrush( IMAGE_BRUSH( "Common/Selection", Icon8x8, FLinearColor(1.0f, 1.0f, 1.0f, 0.1f) ) )
.SetOddRowBackgroundBrush( FSlateNoResource() )
.SetOddRowBackgroundHoveredBrush( IMAGE_BRUSH( "Common/Selection", Icon8x8, FLinearColor(1.0f, 1.0f, 1.0f, 0.1f) ) )
.SetSelectorFocusedBrush( IMAGE_BRUSH( "Common/Selector", Icon8x8, SelectorColor ) )
.SetActiveBrush( IMAGE_BRUSH( "Common/Selection", Icon8x8, SelectionColor ) )
.SetActiveHoveredBrush( IMAGE_BRUSH( "Common/Selection", Icon8x8, SelectionColor ) )
.SetInactiveBrush( IMAGE_BRUSH( "Common/Selection", Icon8x8, SelectionColor_Inactive ) )
.SetInactiveHoveredBrush( IMAGE_BRUSH( "Common/Selection", Icon8x8, SelectionColor_Inactive ) )
//.SetTextColor( DefaultForeground )
.SetSelectedTextColor( FLinearColor( 0.72f, 0.72f, 0.72f, 1.f ) );
Style.Set( "MyGame.RowStyle", FTableRowStyle( NormalTableRowStyle) );
(I think the important one’s .SetSelectedTextColor, but I can’t quite remember…)
Then using it as the base-style in my custom widget’s construct function, like this:
STableRow<TSharedPtr<FString>>::FArguments rowArguments = STableRow<TSharedPtr<FString>>::FArguments().Style(FEditorStyle::Get(),"MyGame.RowStyle");
STableRow< TSharedPtr<FString> >::ConstructInternal(rowArguments, InOwnerTableView );