आप wpf में बटन बॉर्डर को पूरी तरह से कैसे हटाते हैं?


129

मैं एक बटन बनाने की कोशिश कर रहा हूं, जिसमें एक छवि है और कोई सीमा नहीं है - जैसे फ़ायरफ़ॉक्स टूलबार बटन उन पर मंडराने से पहले और पूर्ण बटन देखें।

मैंने करने की कोशिश की BorderBrushहै Transparent, BorderThicknessकरने के लिए 0, और भी करने की कोशिश की BorderBrush="{x:Null}", लेकिन आप अभी भी बटन की रूपरेखा देख सकते हैं।



1
WPF में एक बॉर्डरलेस बटन !!! आपको क्या लगता है यह एक सहज यूआई फ्रेमवर्क है ??
जोश नू

जवाबों:


258

इसे इस्तेमाल करे

<Button BorderThickness="0"  
    Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}" >...

1
बहुत खुबस! मेरे द्वारा पाया गया हर दूसरा समाधान बेहद जटिल है और इसमें बटन की सभी स्टाइल को ओवरराइड करना शामिल है।
जोनाथन

10
दुर्भाग्य से, यह करने के HorizontalContentAlignmentलिए सेटिंग के प्रभाव को निष्क्रिय करता है Stretch
कोनराड मोरावस्की

3
@ C @UR ने निर्दिष्ट किया कि WPF सिल्वरलाइट नहीं
साइमन

10
यह मेरे बटन को टॉगल बटन में बदल रहा है। जब मैं बटन पर क्लिक करता हूं तो वह तब तक चयनित रहता है जब तक कि मैं दूसरे बटन पर क्लिक नहीं करता। मैं इसे इस तरह अभिनय करने से कैसे रोकूंगा?
burnttoast11

2
अगर मैं कर सकता था तो मैं इसे दो बार बढ़ाऊंगा। मुझे जो लुक चाहिए उसे पाने के लिए बहुत सारे कोड सेव किए।
एवेंमोर

52

आपको बटन टेम्प्लेट को बदलना पड़ सकता है, इससे आपको बिना किसी फ्रेम के एक बटन मिलेगा जो कभी भी, लेकिन बिना किसी प्रेस या अक्षम प्रभाव के भी हो सकता है:

    <Style x:Key="TransparentStyle" TargetType="{x:Type Button}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <Border Background="Transparent">
                        <ContentPresenter/>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

और बटन:

<Button Style="{StaticResource TransparentStyle}"/>

मुझे नहीं पता कि अन्य समाधान अन्य लोगों पर क्यों काम करते हैं। यह समाधान एकमात्र है जो काम कर सकता है क्योंकि ContentPresenter Border line भी हटा दी गई है! अच्छा कार्य!
नसनबेर

1
मैंने कई अन्य समाधानों की कोशिश की, यह केवल एक ही काम करता है। btw, newbies के लिए, <style> </ style> कोड आपके xaml के शीर्षलेख में होना चाहिए जैसे <Window> <Window.Resource> <Style> ....
Felix

1
इसके अलावा, उत्तर में एक टाइपो है: <Button Style="{StaticResource TransparentButton}"/>होना चाहिए<Button Style="{StaticResource TransparentStyle}"/>
फेलिक्स

मेरे लिए भी काम किया, महान समाधान!
bbqchickenrobot

मेरे लिए काम किया, शानदार समाधान!
कंटैंगो

23

आपको जो करना है वह कुछ इस तरह है:

<Button Name="MyFlatImageButton"
        Background="Transparent"
        BorderBrush="Transparent"
        BorderThickness="0" 
        Padding="-4">
   <Image Source="MyImage.png"/>
</Button>

आशा है कि आपको इसी की तलाश थी।

संपादित करें: क्षमा करें, यह उल्लेख करना भूल गए कि यदि आप छवि पर हॉवर करते समय बटन-बॉर्डर देखना चाहते हैं, तो आपको केवल पैडिंग = "- 4" को छोड़ना होगा ।


1
यह काम करता है, और इस कुछ मामलों में बहुत अच्छा विचार है
curiousity

यह पूरी तरह से काम करता है जब आप एक बटन के अंदर एक छवि को फैलाना चाहते हैं। पैडिंग को हटाने से छवि को पूर्ण बटन आयामों पर कब्जा करने की सुविधा मिलती है।
visc

23

मुझे नहीं पता कि दूसरों ने इस ओर ध्यान क्यों नहीं दिया कि इस प्रश्न का उत्तर स्वीकृत उत्तर के साथ दिया गया है

मैं यहां समाधान का उद्धरण देता हूं: आपको निम्नलिखित को ओवरराइड करने ControlTemplateकी आवश्यकता है Button:

<Button Content="save" Name="btnSaveEditedText" 
                Background="Transparent" 
                Foreground="White" 
                FontFamily="Tw Cen MT Condensed" 
                FontSize="30" 
                Margin="-280,0,0,10"
                Width="60"
                BorderBrush="Transparent"
                BorderThickness="0">
    <Button.Template>
        <ControlTemplate TargetType="Button">
             <ContentPresenter Content="{TemplateBinding Content}"/>
        </ControlTemplate>
    </Button.Template>  
</Button>

5
यदि आप बटन के अंदर कोई सामग्री नहीं डालते हैं तो यह क्लिकों का जवाब नहीं देगा। आप एक पारदर्शी पृष्ठभूमि के साथ सीमा में उस ContentPresenter को लपेटकर उसे ठीक कर सकते हैं। इस तरह से आप किसी भी आकार के रिक्त / पारदर्शी बटन को एक छवि पर रख सकते हैं।
bj0

3

आप इस तरह बटन के बजाय हाइपरलिंक का उपयोग कर सकते हैं:

        <TextBlock>
            <Hyperlink TextDecorations="{x:Null}">
            <Image Width="16"
                   Height="16"
                   Margin="3"
                   Source="/YourProjectName;component/Images/close-small.png" />
            </Hyperlink>
        </TextBlock>

2

आप पहले से ही जानते होंगे कि अपने बटन को टूलबार के अंदर रखने से आपको यह व्यवहार मिलता है, लेकिन यदि आप ऐसा कुछ चाहते हैं जो किसी भी प्रकार की पूर्वानुमेयता के साथ सभी वर्तमान थीम पर काम करेगा, तो आपको एक नया कंट्रोलटेम्पलेट बनाना होगा।

जब बटन पर फोकस होता है तो प्रशांत का समाधान एक टूलबार में बटन के साथ काम नहीं करता है। यह भी XP में डिफ़ॉल्ट विषय के साथ 100% काम नहीं करता है - आप अभी भी बेहोश ग्रे सीमाओं को देख सकते हैं जब आपका कंटेनर पृष्ठभूमि सफेद है।


1

प्रोग्रामेटिक रूप से, आप यह कर सकते हैं:

btn.BorderBrush = new SolidColorBrush(Colors.Transparent);

1
मुझे नहीं लगता कि यह उपयोगी हो सकता है, क्योंकि वह
एक्सएएमएल

-1

आप दोनों Background & BorderBrushएक ही सेट क्यों नहीं करतेbrush

 <Style TargetType="{x:Type Button}" >
        <Setter Property="Background" Value="{StaticResource marginBackGround}"></Setter>
        <Setter Property="BorderBrush" Value="{StaticResource marginBackGround}"></Setter>            
 </Style>

<LinearGradientBrush  x:Key="marginBackGround" EndPoint=".5,1" StartPoint="0.5,0">
    <GradientStop Color="#EE82EE" Offset="0"/>
    <GradientStop Color="#7B30B6" Offset="0.5"/>
    <GradientStop Color="#510088" Offset="0.5"/>
    <GradientStop Color="#76209B" Offset="0.9"/>
    <GradientStop Color="#C750B9" Offset="1"/>
</LinearGradientBrush>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.