Wie entfernen Sie den Schaltflächenrand in wpf vollständig?

129

Ich versuche, eine Schaltfläche zu erstellen, die ein Bild und keinen Rand enthält - genau wie die Schaltflächen in der Firefox-Symbolleiste, bevor Sie mit der Maus darüber fahren und die vollständige Schaltfläche sehen.

Ich habe versucht, das BorderBrushauf Transparent, BorderThicknessauf 0und auch zu setzen BorderBrush="{x:Null}", aber Sie können immer noch den Umriss der Schaltfläche sehen.

Steven Jeuris
quelle
1
alt Antwort
Jake Berger
1
Ein randloser Button in WPF? !!! Was denkst du, ist dies ein intuitives UI-Framework?
Josh Noe

Antworten:

258

Versuche dies

<Button BorderThickness="0"  
    Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}" >...
Simon
quelle
1
Fantastisch! Jede andere Lösung, die ich gefunden habe, ist extrem kompliziert und beinhaltet das Überschreiben des gesamten Stils der Schaltfläche.
Jonathan
10
Leider deaktiviert es den Effekt der Einstellung HorizontalContentAlignmentauf Stretch.
Konrad Morawski
3
@ Cœur die Fragen angegeben WPF nicht Silverlight
Simon
10
Dies verwandelt meinen Knopf in einen Umschaltknopf. Wenn ich auf die Schaltfläche klicke, bleibt sie ausgewählt, bis ich auf eine andere Schaltfläche klicke. Wie würde ich verhindern, dass es sich so verhält?
Burnttoast11
2
Ich würde das zweimal positiv bewerten, wenn ich könnte. Ich habe viel Code gespart, um das gewünschte Aussehen zu erhalten.
Avenmore
52

Möglicherweise müssen Sie die Schaltflächenvorlage ändern. Dadurch erhalten Sie eine Schaltfläche ohne Rahmen, aber auch ohne Druck oder deaktivierten Effekt:

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

Und der Knopf:

<Button Style="{StaticResource TransparentStyle}"/>
Snehal
quelle
Ich weiß nicht, warum andere Lösungen bei anderen Menschen zu funktionieren scheinen. Diese Lösung ist die einzige, die funktionieren kann, da auch die ContentPresenter-Grenzlinie entfernt wird! Gute Arbeit!
Nasenbaer
1
Ich habe mehrere andere Lösungen ausprobiert, dies ist die einzige, die funktioniert. Übrigens sollte für Neulinge der Code <style> </ style> im Header Ihres xaml stehen, wie in <Window> <Window.Resource> <Style> ....
Felix
1
Außerdem gibt es einen Tippfehler in der Antwort: <Button Style="{StaticResource TransparentButton}"/>sollte sein<Button Style="{StaticResource TransparentStyle}"/>
Felix
Hat auch für mich funktioniert, tolle Lösung!
Bbqchickenrobot
Arbeitete für mich, fantastische Lösung!
Contango
23

Was Sie tun müssen, ist ungefähr so:

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

Hoffe das ist was du gesucht hast.

Bearbeiten: Entschuldigung, ich habe vergessen zu erwähnen, dass Sie nur das Padding = "- 4" überspringen müssen, wenn Sie den Schaltflächenrand sehen möchten, wenn Sie mit der Maus über das Bild fahren .

Alfred B. Thordarson
quelle
1
Dies funktioniert, und dies ist in einigen Fällen eine sehr schöne Idee
Neugier
Dies funktioniert perfekt, wenn Sie ein Bild innerhalb einer Schaltfläche strecken möchten. Durch Entfernen der Polsterung nimmt das Bild die vollen Tastenabmessungen ein.
Visc
23

Ich weiß nicht, warum andere nicht darauf hingewiesen haben, dass diese Frage mit dieser mit akzeptierter Antwort dupliziert wird .

Ich zitiere hier die Lösung: Sie müssen die außer Kraft setzen ControlTemplateder 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>
Nam G VU
quelle
5
Wenn Sie keinen Inhalt in die Schaltfläche einfügen, reagiert dieser nicht auf Klicks. Sie können dies beheben, indem Sie diesen ContentPresenter in einen Rahmen mit transparentem Hintergrund einschließen. Auf diese Weise können Sie eine leere / transparente Schaltfläche beliebiger Größe über einem Bild platzieren.
bj0
3

Sie können Hyperlink anstelle von Button wie folgt verwenden:

        <TextBlock>
            <Hyperlink TextDecorations="{x:Null}">
            <Image Width="16"
                   Height="16"
                   Margin="3"
                   Source="/YourProjectName;component/Images/close-small.png" />
            </Hyperlink>
        </TextBlock>
Сергей Гусев
quelle
2

Möglicherweise wissen Sie bereits, dass das Einfügen Ihrer Schaltfläche in eine Symbolleiste zu diesem Verhalten führt. Wenn Sie jedoch etwas wünschen, das für ALLE aktuellen Themen mit jeder Art von Vorhersagbarkeit funktioniert, müssen Sie eine neue ControlTemplate erstellen.

Die Lösung von Prashant funktioniert nicht mit einer Schaltfläche, die sich nicht in einer Symbolleiste befindet, wenn die Schaltfläche den Fokus hat. Es funktioniert auch nicht 100% mit dem Standarddesign in XP - Sie können immer noch schwache graue Ränder sehen, wenn Ihr Containerhintergrund weiß ist.

Micahtan
quelle
1

Programmatisch können Sie dies tun:

btn.BorderBrush = new SolidColorBrush(Colors.Transparent);
Ricardo
quelle
1
Ich denke nicht, dass dies nützlich sein könnte, da er nach einer Lösung auf der XAML-Seite sucht
Mohamed Kamel Bouzekria
-1

Warum setzen Sie nicht beide Background & BorderBrushgleich?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>
Moumit
quelle