मैं डेटा बाइंडिंग के माध्यम से 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>

हालांकि, हाइपरलिंक वर्ग में एक पाठ या सामग्री संपत्ति नहीं है जो डेटा बाइंडिंग (यानी, एक निर्भरता संपत्ति) के लिए उपयुक्त है।

कोई विचार?

जवाबों:


212

यह अजीब लग रहा है, लेकिन यह काम करता है। हम इसे अपने ऐप में लगभग 20 अलग-अलग जगहों पर करते हैं। यदि आप इसके "कंटेंट" में टेक्स्ट डालते हैं, तो इसका Hyperlinkस्पष्ट अर्थ है <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}" />

तो, क्या इसका मतलब है कि हाइपरलिंक की सामग्री संपत्ति में इनलाइन संग्रह है?
मल रॉस

4
क्या यह सिर्फ मेरे लिए है या यह लिंक को वास्तव में काम करने से रोकता है?
टोबियास वालिंस्की

आपको अभी भी RequestNavigate को संभालने की आवश्यकता है
रोल करता है

10

इसने मेरे लिए एक "पेज" में काम किया।

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

1

उदाहरण के लिए विंडोज स्टोर ऐप (और विंडोज फोन 8.1 आरटी ऐप) पर काम नहीं करता है, हाइपरलिंकबटन का उपयोग करें और यूज़ के रूप में कंटेंट और नेवीग्यूट्री गुणों को बांधें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.