Làm cách nào tôi có thể đặt văn bản của Siêu liên kết WPF thông qua liên kết dữ liệu?


129

Trong WPF, tôi muốn tạo một siêu liên kết điều hướng đến các chi tiết của một đối tượng và tôi muốn văn bản của siêu liên kết là tên của đối tượng. Ngay bây giờ, tôi có cái này:

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

Nhưng tôi muốn "Tên đối tượng" được liên kết với tên thật của đối tượng. Tôi muốn làm một cái gì đó như thế này:

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

Tuy nhiên, lớp Hyperlink không có thuộc tính văn bản hoặc nội dung phù hợp để liên kết dữ liệu (nghĩa là thuộc tính phụ thuộc).

Có ý kiến ​​gì không?

Câu trả lời:


212

Có vẻ lạ, nhưng nó hoạt động. Chúng tôi làm điều đó ở khoảng 20 nơi khác nhau trong ứng dụng của chúng tôi. Hyperlinkngầm định xây dựng một <Run/>nếu bạn đặt văn bản vào "nội dung" của nó, nhưng trong .NET 3.5 <Run/>sẽ không cho phép bạn liên kết với nó, vì vậy bạn phải sử dụng rõ ràng a TextBlock.

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

Cập nhật : Lưu ý rằng kể từ .NET 4.0, thuộc tính Run.Text có thể bị ràng buộc:

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

Vì vậy, điều đó có nghĩa là thuộc tính nội dung của Hyperlink là bộ sưu tập Inlines?
Mal Ross

4
Có phải chỉ tôi hoặc điều này ngăn liên kết thực sự hoạt động?
Tobias Valinski

Bạn vẫn cần xử lý RequestNavigate
cuộn vào

10

Điều này làm việc cho tôi trong một "Trang".

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

1

Trên ứng dụng Windows Store (và ứng dụng Windows Phone 8.1 RT), ví dụ trên không hoạt động, hãy sử dụng HyperlinkButton và liên kết các thuộc tính Nội dung và NavigateUri như thông dụng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.