Я столкнулся с той же проблемой с Windows XP и 7.
Атрибут Foreground = "Black" заменяет встроенный триггер стиля, который является функцией IsEnabled.
Чтобы выполнить то, что вы ищете, необходимо создать собственный стиль с помощью Trigger on IsEnabled. Следующий код показывает, как сделать это в строке, хотя вы, вероятно, захотите перетащить стиль в раздел ресурсов и использовать его во всех пунктах меню.
<MenuItem Header="My Item" IsEnabled="{Binding MyItemEnabled}">
<MenuItem.Style>
<Style TargetType="{x:Type MenuItem}">
<Setter Property="Foreground" Value="Black"/>
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Foreground" Value="Gray"/>
</Trigger>
</Style.Triggers>
</Style>
</MenuItem.Style>
</MenuItem>