为什么 StringFormat 对我的 MenuItem.Header 的绑定没有影响?

Why does StringFormat have no effect on the binding of my MenuItem.Header?

我的所有 6 个样本的绑定中都有 "StringFormat",但应用了 none,我只得到了没有任何格式的值。

知道我哪里做错了吗?

<MenuItem Header="{Binding SeriesNearMouse.Count, StringFormat='Series {0}'}">
</MenuItem>

<MenuItem DataContext="SeriesNearMouse">
    <MenuItem.Header>
        <Binding Path="Count" 
                    StringFormat="Series{0:D}test">
        </Binding>
    </MenuItem.Header>

</MenuItem>
<MenuItem>
    <MenuItem.Header>
        <Binding Path="SeriesNearMouse.Count" 
                    StringFormat="Series{0}">
        </Binding>
    </MenuItem.Header>
</MenuItem>

<MenuItem Header="{Binding SeriesNearMouse.Count, StringFormat='{}Series {0}'}">
</MenuItem>

<MenuItem DataContext="SeriesNearMouse">
    <MenuItem.Header>
        <Binding Path="Count" 
                    StringFormat="{}Series{0:D}test">
        </Binding>
    </MenuItem.Header>

</MenuItem>
<MenuItem>
    <MenuItem.Header>
        <Binding Path="SeriesNearMouse.Count" 
                    StringFormat="{}Series{0}">
        </Binding>
    </MenuItem.Header>
</MenuItem>

它可能没有像您期望的那样工作,因为 MenuItem.Header 是一个对象,而不是字符串。

这样的事情应该可行,因为 Run.Text 是一个字符串:

<MenuItem>
  <MenuItem.Header>
    <Run Text="{Binding SeriesNearMouse.Count, StringFormat='Series {0}', Mode=OneWay}" />
  </MenuItem.Header>
</MenuItem>

迟到的答案

Header 不是字符串 属性。它实际上是在 ContentPresenter 中呈现的对象 属性。为了将字符串格式传递给ContentPresenterMenuItem提供了HeaderStringFormat 属性:

<MenuItem Header="{Binding SeriesNearMouse.Count}" HeaderStringFormat="Series {0}">