145

I'm trying to create a button that has an image in it and no border - just like the Firefox toolbar buttons before you hover over them and see the full button.

I've tried setting the BorderBrush to Transparent, BorderThickness to 0, and also tried BorderBrush="{x:Null}", but you can still see the outline of the button.

2
  • 1
    alt answer Commented Mar 14, 2012 at 18:58
  • 4
    A borderless button in WPF?!!! What do you think this is, an intuitive UI framework??! Commented Sep 21, 2016 at 16:17

7 Answers 7

282

Try this

<Button BorderThickness="0"  
    Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}" >...
Sign up to request clarification or add additional context in comments.

7 Comments

Fantastic! Every other solution I've found is extremely convoluted and involves overriding all styling of the button.
Unfortunately, it disables the effect of setting HorizontalContentAlignment to Stretch.
@Cœur the questions specified WPF not Silverlight
This is turning my button into a toggle button. When I click the button it stays selected until I click another button. How would I stop it from acting like that?
I'd upvote this twice if I could. Saved me a lot of code to get the look I want.
|
61

You may have to change the button template, this will give you a button with no frame what so ever, but also without any press or disabled effect:

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

And the button:

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

6 Comments

I don't know why other solutions seems to work at other people. This solution is the only one which can work because the ContentPresenter Border line is also removed! Good work!
I tried several other solutions, this is the only one works. btw, for newbies, the <style></style> code should be in the header of your xaml like in <Window><Window.Resource><Style>....
also, there is a typo in the answer: <Button Style="{StaticResource TransparentButton}"/> should be <Button Style="{StaticResource TransparentStyle}"/>
Worked for me as well, great solution!
Why there is empty <ContentPresenter/> ? What is it for?
|
27

What you have to do is something like this:

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

Hope this is what you were looking for.

Edit: Sorry, forgot to mention that if you want to see the button-border when you hover over the image, all you have to do is skip the Padding="-4".

3 Comments

This works, and this is very nice idea in some cases
This works perfectly when you want to stretch an image inside a button. Removing the padding lets the image occupy the full button dimensions.
To remove only the border, BorderThickness="0" is enough
24

I don't know why others haven't pointed out that this question is duplicated with this one with accepted answer.

I quote here the solution: You need to override the ControlTemplate of the 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>

1 Comment

If you don't put any content inside the button it will not respond to clicks. You can fix that by wrapping that ContentPresenter in a Border with a transparent background. That way you can make a blank/transparent button of any size to place over an image.
4

You can use Hyperlink instead of Button, like this:

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

1 Comment

I like this solution. It's a nice trick, gives you a hand cursor on hover and doesn't require to use a custom style.
2

You may already know that putting your Button inside of a ToolBar gives you this behavior, but if you want something that will work across ALL current themes with any sort of predictability, you'll need to create a new ControlTemplate.

Prashant's solution does not work with a Button not in a toolbar when the Button has focus. It also doesn't work 100% with the default theme in XP -- you can still see faint gray borders when your container Background is white.

Comments

-2

Why don't you set both Background & BorderBrush by same 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>

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.