データバインディングを介してWPFハイパーリンクのテキストを設定するにはどうすればよいですか?


129

WPFでは、オブジェクトの詳細に移動するハイパーリンクを作成し、ハイパーリンクのテキストをオブジェクトの名前にしたいと思います。今、私はこれを持っています:

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

しかし、「オブジェクト名」をオブジェクトの実際の名前にバインドする必要があります。私はこのようなことをしたいと思います:

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

ただし、Hyperlinkクラスには、データバインディングに適したテキストまたはコンテンツプロパティ(つまり、依存関係プロパティ)がありません。

何か案は?

回答:


212

奇妙に見えますが、動作します。アプリの約20か所で実行します。「コンテンツ」にテキストを挿入Hyperlinkすると、暗黙的にa <Run/>が作成されますが、.NET 3.5では<Run/>バインドできません。そのため、明示的にを使用する必要がありTextBlockます。

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

更新:.NET 4.0以降、Run.Textプロパティをバインドできるようになりました。

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

では、ハイパーリンクのコンテンツプロパティがインラインコレクションであることを意味しますか?
Mal Ross

4
私だけですか、それともリンクが実際に機能しなくなりますか?
Tobias Valinski、2014

それでもRequestNavigateを処理する必要があります
ロール

10

これは「ページ」で私のために働きました。

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

1

Windowsストアアプリ(およびWindows Phone 8.1 RTアプリ)では、上記の例は機能しません。ハイパーリンクボタンを使用し、ContentおよびNavigateUriプロパティを通常どおりにバインドします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.