MenuItemのソースをもうちょっと読んでみる

結局、

<MenuItem Header="{Binding Value}" HeaderStringFormat="{}{0}円"/>

<MenuItem Header="{Binding Value, StringFormat={}{0}円}" HeaderStringFormat="{}{0}円">
    <MenuItem.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding ., StringFormat={Binding HeaderStringFormat}}" />
        </DataTemplate>
    </MenuItem.ItemTemplate>
</MenuItem>

と自動で展開されて、

<MenuItem>
    <MenuItem.Header>
        <TextBlock Text="{Binding Value, StringFormat={}{0}円}"/>
    </MenuItem.Header>
</MenuItem>

と等可になる、ということですかね。ソースだけで動きを追うのたいへんだなぁ…。