¿Cómo puedo configurar el texto de un hipervínculo WPF a través del enlace de datos?


129

En WPF, quiero crear un hipervínculo que navegue a los detalles de un objeto, y quiero que el texto del hipervínculo sea el nombre del objeto. En este momento, tengo esto:

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

Pero quiero que "Nombre del objeto" esté vinculado al nombre real del objeto. Me gustaría hacer algo como esto:

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

Sin embargo, la clase Hyperlink no tiene una propiedad de texto o contenido que sea adecuada para el enlace de datos (es decir, una propiedad de dependencia).

¿Algunas ideas?

Respuestas:


212

Parece extraño, pero funciona. Lo hacemos en unos 20 lugares diferentes en nuestra aplicación. Hyperlinkconstruye implícitamente a <Run/>si coloca texto en su "contenido", pero en .NET 3.5 <Run/>no le permitirá enlazarlo, por lo que debe usar explícitamente a TextBlock.

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

Actualización : Tenga en cuenta que a partir de .NET 4.0, la propiedad Run.Text ahora puede vincularse:

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

Entonces, ¿eso significa que la propiedad de contenido de un hipervínculo es la colección Inlines?
Mal Ross

44
¿Soy solo yo o esto impide que el enlace realmente funcione?
Tobias Valinski

Todavía es necesario para manejar el RequestNavigate
rollos

10

Esto funcionó para mí en una "Página".

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

1

En la aplicación Windows Store (y la aplicación Windows Phone 8.1 RT) el ejemplo anterior no funciona, use HyperlinkButton y enlace las propiedades Content y NavigateUri como de costumbre.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.