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

11

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

@Sheridan,你让我意识到我的标题选择不够好。但我更喜欢我刚修改的那个,因为它没有否定(不)并且似乎更准确(更好地表示了我所遇到的情况)。感谢你帮助我提出更好的问题。 - Eric Ouellet
2个回答

28

回答晚了

Header并不是一个字符串属性,实际上它是一个对象属性,用于在ContentPresenter中显示。为了将字符串格式传递给ContentPresenterMenuItem提供了一个HeaderStringFormat属性:

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

1
非常感谢。这应该也会帮助其他人。点赞! - Eric Ouellet
非常有信息量的回答。在微软提供的非常完整的文档中,我们该如何/在哪里找到关于WPF背后原理的文档/演示?(作为嵌入式工程师,当前WPF不是我的主要技能,我总是会陷入这样的陷阱。幸运的是,我几乎可以在SO上找到所有东西) - NGI
@NGI 我认为这取决于你想要投入多少。如果你需要快速开始一个项目,可能可以通过在线教程之一开始,然后随着进展逐步了解细节。如果你有时间,我认为更好的方法是选择一本流行的 WPF 书籍。我还推荐 wpf.2000things.com。 - Eren Ersönmez

14

可能它不按照你的期望工作是因为MenuItem.Header是一个对象,而不是字符串。

像这样做应该可以,因为Run.Text是一个字符串:

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

非常感谢。你完全是正确的。我不会告诉你我尝试使它工作浪费了多少时间... 但是你救了我的命 :-) !!!!!!(我本可以尝试使用特定的转换器,但对于这么少的内容而言,那会太过繁琐和过于具体)。 - Eric Ouellet
注意:如果您想要访问键,您需要将“Run”替换为“AccessText”。请参见此处 - Roman Reiner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接