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

时间:2015-03-26 01:51:40

标签: c# wpf binding string-formatting

我的6个样本中的所有样本在其绑定中都有“StringFormat”但没有应用,我只获取没有任何格式的值。

知道我做错了吗?

<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>

2 个答案:

答案 0 :(得分:11)

迟到的答案

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

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

答案 1 :(得分:9)

由于MenuItem.Header是一个对象,而不是一个字符串,因此可能无法按预期工作。

这样的东西应该可以工作,因为Run.Text是一个字符串:

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