Wpf में लिंक बटन


90

मैं लिंकबटन की तरह दिखने के लिए बटन कैसे बना सकता हूं, और मैं हाइपरलिंक का उपयोग नहीं करना चाहता ... !!

कोई सुझाव


1
अगर किसी को परवाह है, तो यहां सभी उत्तरों के साथ मुद्दा यह है कि उत्तरों में लिंक वास्तव में लिंक की तरह व्यवहार नहीं करते हैं। वे विज़िट किए गए url इतिहास से अवगत नहीं हैं और रंग सिस्टम url रंग नहीं हैं। लेकिन, यदि आपके पास वे आवश्यकताएं नहीं हैं, तो वे ठीक हैं।

मैं यह पता लगाने की कोशिश कर रहा हूं कि सही विंडोज रंगों का उपयोग कैसे किया जाए। stackoverflow.com/questions/5094447
ज़ैक पीटरसन

जवाबों:


148

यदि आप किसी भी सामान्य बटन शैली को नहीं चाहते हैं और बस कुछ ऐसा चाहते हैं जो हाइपरलिंक जैसा दिखता है तो आप इसके साथ शुरू कर सकते हैं

<Button Margin="5" Content="Test" Cursor="Hand">
    <Button.Template>
        <ControlTemplate TargetType="Button">
            <TextBlock TextDecorations="Underline">
                <ContentPresenter />
            </TextBlock>
        </ControlTemplate>
    </Button.Template>
    <Button.Style>
        <Style TargetType="Button">
            <Setter Property="Foreground" Value="Blue" />
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="true">
                    <Setter Property="Foreground" Value="Red" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

यहाँ एक शैली के रूप में ही है:

<Style
    x:Key="LinkButton"
    TargetType="Button">
    <Setter
        Property="Template">
        <Setter.Value>
            <ControlTemplate
                TargetType="Button">
                <TextBlock
                    TextDecorations="Underline">
                <ContentPresenter /></TextBlock>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter
        Property="Foreground"
        Value="Blue" />
    <Style.Triggers>
        <Trigger
            Property="IsMouseOver"
            Value="true">
            <Setter
                Property="Foreground"
                Value="Red" />
        </Trigger>
    </Style.Triggers>
</Style>

और आप इसे इस तरह से उपयोग कर सकते हैं:

<Button Style="{StaticResource LinkButton}" Content="Clicky" />

कृपया ध्यान दें कि यहाँ एक टाइपो है - लिंकबटन
गारेथ

2
यह उत्तर एक बटन का उत्पादन करता है जिसमें अंडरलाइन और टेक्स्ट के बीच एक स्थान होता है। @ क्रिश्चियनों का उत्तर यह हल करता है।
ग्रेग सैन्सोम

यह भी हाइपरलिंक पर मँडरा जब "हाथ" सूचक नहीं है। इस कार्यक्षमता के लिए सामुदायिक विकि उत्तर का उपयोग करें।
अल्बाट्रॉस

मैं जोड़ने के लिए सुझाव है <Trigger Property="IsEnabled" Value="False"><Setter Property="Foreground" Value="Gray" /> </Trigger>IsEnabled राज्य को संभालने के लिए
साइमन

33
<Style x:Key="LinkButton" 
       TargetType="Button"
       BasedOn="{StaticResource ResourceKey={x:Type Button}}"
       >

    <Setter Property="Width" Value="Auto"/>

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <ContentPresenter Content="{TemplateBinding Content}" 
                                  ContentTemplate="{TemplateBinding  ContentTemplate}"
                                  VerticalAlignment="Center"
                                  >
                    <ContentPresenter.Resources>
                        <Style TargetType="{x:Type TextBlock}">
                            <Setter Property="TextDecorations" Value="Underline" />
                        </Style>
                    </ContentPresenter.Resources>
                </ContentPresenter>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="Foreground" Value="Blue" />
    <Setter Property="Cursor" Value="Hand" />
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="true">
            <Setter Property="Foreground" Value="Red" />
        </Trigger>
    </Style.Triggers>
</Style>

MichaC और एंडरसन के संस्करण ने अंडरलाइन को थोड़ा गलत रखा, यहां एक अपडेट किया गया संस्करण है जो कि केवल TextBlockउसी के अंदर किसी अंडरलाइन को जोड़ देगा ContentPresenter


1
क्रिश्चियन: कैसे आता है मैं अपनी शैली का उपयोग कर किसी भी रेखांकन नहीं देख सकते हैं? MichaC का मेरे लिए बस ठीक काम है।
न्यूमैन

यह मेरे लिए भी काम नहीं कर रहा है। ContentPresenter.Resources के भीतर की शैली बस बटन के भीतर किसी भी TextBlock के लिए लागू नहीं हो रही है
क्लाइड

ठीक है, इस मुद्दे को लगता है कि शैली केवल एक निहित उत्पन्न पाठ पर लागू होती है
क्लाइड

<बटन शैली = "{StaticResource LinkButton}"> पाठ </ बटन> काम करता है
क्लाइड

<बटन शैली = "{StaticResource LinkButton}"> <TextBlock पाठ = "परीक्षण" /> </ बटन> काम नहीं करता है
Clyde

30

यहाँ MichaC के सुझाव को इस प्रकार लागू किया गया है Styleकि आप किसी भी बटन पर पुनः प्रयोग कर सकते हैं:

<Style x:Key="LinkButton" TargetType="Button">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <TextBlock TextDecorations="Underline">
                    <ContentPresenter />
                </TextBlock>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="Foreground" Value="Blue" />
    <Setter Property="Cursor" Value="Hand" />
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="true">
            <Setter Property="Foreground" Value="Red" />
        </Trigger>
    </Style.Triggers>
</Style>

8
इस समुदाय को विकी बना दिया, इस जवाब पर विचार करने पर 99% माइकहा से चोरी हो जाता है :)
एंडरसन Imes

11

सबसे आसान तरीका (मैं अपने आवेदन में ऐसा करता हूं):

<TextBlock Name="..."
   Text="..."
   Cursor="Hand"
   Foreground="Blue"
   TextDecorations="Underline"
   MouseLeftButtonUp=..."
/>

आपके पास TextDecoration पर पूर्ण नियंत्रण है, उदाहरण के लिए पेन स्टाइल या ऑफ़सेट बदलें। अधिक जानने के लिए इस लिंक पर एक नज़र डालें: http://msdn.microsoft.com/en-us/library/system.windows.textdecorations.underline.aspx


4
खराब प्रैक्टिस, जैसा कि सुझाव दिया गया लिंक बटन स्टाइल करना बहुत बेहतर है ... क्या होगा अगर आपके पास इस तरह से 50 लिंकबटन हैं? इसके अतिरिक्त, अगर आपको हॉवर कार्रवाई या शायद एक अलग सजावट जोड़ने की आवश्यकता है तो क्या होगा?
तोमर डब्ल्यू

3
मैं तोमर से असहमत हूं। "बुरा अभ्यास" का तात्पर्य है कि इस सरल दृष्टिकोण की आवश्यकता कभी नहीं होती है। मेरे पास अभी एक मामला है जहां यह सही समाधान था यानी कोड-पीछे में बटन बना रहा था)। धन्यवाद सियावश
गाबे हेल्समर

हाँ, यह एक बुरा अभ्यास नहीं है। यह कुछ परिदृश्यों के लिए एकदम सही होगा।
रिचर्ड मूर

8

एक और समाधान का उपयोग कर Hyperlinkअंदर डालना है TextBlock

<TextBlock>
    <Hyperlink Click="...">
        <TextBlock Text="Link text" />
    </Hyperlink>
</TextBlock>

2

आप हाइपरलिंक का उपयोग क्यों नहीं करना चाहते हैं?

<Button>
    <Hyperlink>
</Button>

Coz, जब भी मैं दृश्य पेड़ में माता-पिता को पाने की कोशिश करता हूं तो यह एक अपवाद कहता है हाइपरलिंक दृश्य या विज़ुअल 3 डी नहीं है
प्रशांत चोलाचगड्डा

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