Como posso definir o texto de um hiperlink WPF por meio de ligação de dados?


129

No WPF, quero criar um hiperlink que navegue até os detalhes de um objeto e quero que o texto do hiperlink seja o nome do objeto. Agora, eu tenho o seguinte:

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

Mas quero que "Nome do objeto" seja vinculado ao nome real do objeto. Eu gostaria de fazer algo assim:

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

No entanto, a classe Hyperlink não possui uma propriedade de texto ou conteúdo adequada para ligação de dados (ou seja, uma propriedade de dependência).

Alguma ideia?

Respostas:


212

Parece estranho, mas funciona. Fazemos isso em cerca de 20 lugares diferentes em nosso aplicativo. Hyperlinkconstrói implicitamente a <Run/>se você colocar texto em seu "conteúdo", mas no .NET 3.5 <Run/>não permite vincular a ele, então você deve usar explicitamente a TextBlock.

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

Atualização : observe que, a partir do .NET 4.0, a propriedade Run.Text agora pode ser vinculada:

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

Então, isso significa que a propriedade de conteúdo de um Hyperlink é a coleção Inlines?
Mal Ross

4
Sou eu ou isso impede que o link realmente funcione?
Tobias Valinski 26/02

Você ainda precisa lidar com o RequestNavigate
rolls

10

Isso funcionou para mim em uma "página".

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

1

No aplicativo da Windows Store (e no aplicativo Windows Phone 8.1 RT) acima, o exemplo não funciona, use HyperlinkButton e vincule as propriedades Content e NavigateUri como usuais.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.