web-dev-qa-db-fra.com

Comment puis-je définir le texte d'un hyperlien WPF via une liaison de données?

Dans WPF, je veux créer un lien hypertexte qui navigue vers les détails d'un objet, et je veux que le texte du lien hypertexte soit le nom de l'objet. En ce moment, j'ai ceci:

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

Mais je veux que "Nom de l'objet" soit lié au nom réel de l'objet. Je voudrais faire quelque chose comme ça:

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

Toutefois, la classe Hyperlink n'a pas de propriété de texte ou de contenu qui convient à la liaison de données (c'est-à-dire une propriété de dépendance).

Des idées?

122
rdeetz

Cela semble étrange, mais cela fonctionne. Nous le faisons dans environ 20 endroits différents dans notre application. Hyperlink construit implicitement un <Run/> si vous mettez du texte dans son "contenu", mais dans .NET 3.5 <Run/> ne vous laissera pas vous y lier, vous devez donc utiliser explicitement un TextBlock.

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

Mise à jour : Notez que depuis .NET 4.0, la propriété Run.Text peut maintenant être liée:

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

Cela a fonctionné pour moi dans une "Page".

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

Dans l'application Windows Store (et Windows Phone 8.1 RT) ci-dessus, l'exemple ci-dessus ne fonctionne pas, utilisez HyperlinkButton et liez les propriétés Content et NavigateUri comme une utilisation.

1
Ivan Ičin