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

在 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 类没有适合数据绑定的文本或内容属性(即依赖项属性)。

有什么想法吗?

76865 次浏览

看起来很奇怪,但是很有效。我们在应用程序的20个不同的地方进行操作。如果在其“内容”中放入文本,则 Hyperlink隐式构造 <Run/>,但在。NET 3.5 <Run/>不允许您绑定到它,所以您必须显式地使用 TextBlock

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

更新 : 注意,从.NET 4.0开始,属性现在可以绑定了:

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

这招对我很管用。

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

在 Windows 商店应用程序(和 Windows Phone 8.1 RT 应用程序)上面的例子不工作,使用超链接按钮,并绑定内容和 NavigateUri 属性作为常规。