Come si rimuove completamente il bordo del pulsante in wpf?


129

Sto cercando di creare un pulsante con un'immagine e nessun bordo, proprio come i pulsanti della barra degli strumenti di Firefox prima di passare con il mouse su di essi e vedere il pulsante completo.

Ho provato a impostare BorderBrushto Transparent, BorderThicknessto 0e anche provato BorderBrush="{x:Null}", ma puoi ancora vedere il contorno del pulsante.



1
Un pulsante senza bordi in WPF? !!! Cosa pensi che sia, un framework UI intuitivo ??!
Josh Noe,

Risposte:


258

Prova questo

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

1
Fantastico! Ogni altra soluzione che ho trovato è estremamente contorta e comporta la sostituzione di tutto lo stile del pulsante.
Jonathan,

10
Sfortunatamente, disabilita l'effetto dell'impostazione HorizontalContentAlignmentsu Stretch.
Konrad Morawski,

3
@ Cœur le domande specificate WPF non Silverlight
Simon

10
Questo sta trasformando il mio pulsante in un pulsante di attivazione / disattivazione. Quando faccio clic sul pulsante rimane selezionato fino a quando non faccio clic su un altro pulsante. Come potrei impedire che si comporti così?
burnttoast11,

2
Voterei questo due volte se potessi. Mi ha salvato un sacco di codice per ottenere l'aspetto che desidero.
avenmore,

52

Potrebbe essere necessario modificare il modello del pulsante, questo ti darà un pulsante senza cornice in ogni caso, ma anche senza alcun effetto press o disabilitato:

    <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>

E il pulsante:

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

Non so perché altre soluzioni sembrano funzionare ad altre persone. Questa soluzione è l'unica che può funzionare perché anche la linea di confine di ContentPresenter è stata rimossa! Buon lavoro!
Nasenbaer,

1
Ho provato diverse altre soluzioni, questa è l'unica che funziona. a proposito, per i neofiti, il codice <style> </style> dovrebbe essere nell'intestazione del tuo xaml come in <Window><Window.Resource> <Style> ....
Felix

1
inoltre, c'è un refuso nella risposta: <Button Style="{StaticResource TransparentButton}"/>dovrebbe essere<Button Style="{StaticResource TransparentStyle}"/>
Felix,

Ha funzionato anche per me, ottima soluzione!
bbqchickenrobot,

Ha funzionato per me, soluzione fantastica!
Contango,

23

Quello che devi fare è qualcosa del genere:

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

Spero che questo sia quello che stavi cercando.

Modifica: Scusa, ho dimenticato di dire che se vuoi vedere il bordo del pulsante quando passi con il mouse sopra l'immagine, tutto ciò che devi fare è saltare il Padding = "- 4" .


1
Funziona e in alcuni casi questa è una bella idea
curiosità il

Funziona perfettamente quando vuoi allungare un'immagine all'interno di un pulsante. La rimozione dell'imbottitura consente all'immagine di occupare le dimensioni complete del pulsante.
visc

23

Non so perché altri non abbiano sottolineato che questa domanda è duplicata con questa con risposta accettata .

Cito qui la soluzione: è necessario sostituire ControlTemplateil 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
Se non inserisci alcun contenuto all'interno del pulsante, non risponderà ai clic. Puoi risolverlo avvolgendo quel ContentPresenter in un bordo con uno sfondo trasparente. In questo modo è possibile creare un pulsante vuoto / trasparente di qualsiasi dimensione da posizionare sopra un'immagine.
bj0

3

Puoi usare Hyperlink invece di Button, in questo modo:

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

2

Potresti già sapere che inserire il tuo pulsante all'interno di una barra degli strumenti ti dà questo comportamento, ma se vuoi qualcosa che funzioni su TUTTI i temi attuali con qualsiasi tipo di prevedibilità, dovrai creare un nuovo ControlTemplate.

La soluzione di Prashant non funziona con un pulsante non presente in una barra degli strumenti quando il pulsante è attivo. Inoltre, non funziona al 100% con il tema predefinito in XP: puoi comunque vedere deboli bordi grigi quando il tuo sfondo del contenitore è bianco.


1

A livello di programmazione, è possibile farlo:

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

1
Non penso che questo potrebbe essere utile, poiché sta cercando una soluzione sul lato XAML
Mohamed Kamel Bouzekria,

-1

Perché non impostare entrambi allo Background & BorderBrushstesso modobrush

 <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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.