如何通过数据绑定设置WPF超链接的文本?

时间:2020-03-06 14:47:50  来源:igfitidea点击:

在WPF中,我想创建一个导航到对象详细信息的超链接,并且希望该超链接的文本成为该对象的名称。现在,我有这个:

<TextBlock><Hyperlink Command="local:MyCommands.ViewDetails" CommandParameter="{Binding}">Object Name</Hyperlink></TextBlock>

但我希望将"对象名称"绑定到对象的实际名称。我想做这样的事情:

<TextBlock><Hyperlink Command="local:MyCommands.ViewDetails" CommandParameter="{Binding}" Text="{Binding Path=Name}"/></TextBlock>

但是,Hyperlink类没有适合于数据绑定的text或者content属性(即,依赖项属性)。

有任何想法吗?

解决方案

看起来很奇怪,但是可以。我们在应用程序的大约20个不同位置执行此操作。如果将文本放入"内容"中,则"超链接"会隐式构造一个" <运行/>",但是在.NET 3.5中," <运行/>"将不允许我们对其进行绑定,因此必须显式使用一个" TextBlock"。

<TextBlock>
    <Hyperlink Command="local:MyCommands.ViewDetails" CommandParameter="{Binding}">
        <TextBlock Text="{Binding Path=Name}"/>
    </Hyperlink>
</TextBlock>

更新:请注意,从.NET 4.0开始,可以绑定Run.Text属性:

<Run Text="{Binding Path=Name}" />

这在"页面"中为我工作。

<TextBlock>
<Hyperlink NavigateUri="{Binding Path}">
    <TextBlock Text="{Binding Path=Path}"/>
</Hyperlink></TextBlock>