Come posso impostare il testo di un collegamento ipertestuale WPF tramite associazione dati?


129

In WPF, voglio creare un collegamento ipertestuale che passa ai dettagli di un oggetto e voglio che il testo del collegamento ipertestuale sia il nome dell'oggetto. In questo momento, ho questo:

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

Ma voglio che "Nome oggetto" sia associato al nome reale dell'oggetto. Vorrei fare qualcosa del genere:

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

Tuttavia, la classe Hyperlink non ha una proprietà di testo o contenuto adatta per l'associazione dei dati (ovvero una proprietà di dipendenza).

Qualche idea?

Risposte:


212

Sembra strano, ma funziona. Lo facciamo in circa 20 posti diversi nella nostra app. Hyperlinkcostruisce implicitamente a <Run/>se metti del testo nel suo "contenuto", ma in .NET 3.5 <Run/>non ti lascerà vincolare ad esso, quindi devi usare esplicitamente a TextBlock.

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

Aggiornamento : Notare che a partire da .NET 4.0 la proprietà Run.Text ora può essere associata:

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

Quindi, ciò significa che la proprietà del contenuto di un collegamento ipertestuale è la raccolta Inline?
Mal Ross,

4
Sono solo io o questo impedisce al link di funzionare davvero?
Tobias Valinski,

Devi ancora gestire il RequestNavigate
lancia il

10

Questo ha funzionato per me in una "Pagina".

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

1

Nell'app di Windows Store (e nell'app di Windows Phone 8.1 RT) sopra non funziona, utilizzare HyperlinkButton e associare le proprietà Content e NavigateUri come ususal.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.