Comment puis-je définir le texte d'un lien hypertexte WPF via la liaison de données?


129

Dans WPF, je souhaite créer un lien hypertexte qui navigue vers les détails d'un objet et je souhaite 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. J'aimerais faire quelque chose comme ceci:

<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 adaptée à la liaison de données (c'est-à-dire, une propriété de dépendance).

Des idées?

Réponses:


212

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

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

Mise à jour : Notez qu'à partir de .NET 4.0, la propriété Run.Text peut désormais être liée:

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

Alors, cela signifie-t-il que la propriété de contenu d'un lien hypertexte est la collection Inlines?
Mal Ross

4
Est-ce juste moi ou est-ce que cela empêche le lien de fonctionner?
Tobias Valinski le

Vous devez encore gérer RequestNavigate
lance

10

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

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

1

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.