¿Cómo se elimina completamente el borde del botón en wpf?

129

Estoy tratando de crear un botón que tenga una imagen y no tenga bordes, al igual que los botones de la barra de herramientas de Firefox antes de pasar el cursor sobre ellos y ver el botón completo.

Intenté configurar el BorderBrushto Transparent, BorderThicknessto 0y también lo intenté BorderBrush="{x:Null}", pero aún puedes ver el contorno del botón.

Steven Jeuris
fuente
1
respuesta
Jake Berger
1
Un botón sin bordes en WPF? !!! ¿Qué crees que es esto, un marco de interfaz de usuario intuitivo?
Josh Noe

Respuestas:

258

Prueba esto

<Button BorderThickness="0"  
    Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}" >...
Simón
fuente
1
¡Fantástico! Todas las demás soluciones que he encontrado son extremadamente complicadas e implican anular todo el estilo del botón.
Jonathan
10
Desafortunadamente, deshabilita el efecto de establecer HorizontalContentAlignmenten Stretch.
Konrad Morawski
3
@ Cœur las preguntas especificadas WPF no Silverlight
Simon
10
Esto está convirtiendo mi botón en un botón de alternar. Cuando hago clic en el botón, permanece seleccionado hasta que hago clic en otro botón. ¿Cómo podría evitar que actúe así?
burnttoast11
2
Votaría esto dos veces si pudiera. Me ahorró mucho código para obtener el aspecto que quiero.
avenmore
52

Puede que tenga que cambiar la plantilla del botón, esto le dará un botón sin marco, pero también sin presionar o deshabilitar el efecto:

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

Y el botón:

<Button Style="{StaticResource TransparentStyle}"/>
Snehal
fuente
No sé por qué otras soluciones parecen funcionar en otras personas. ¡Esta solución es la única que puede funcionar porque la línea de borde ContentPresenter también se elimina! ¡Buen trabajo!
Nasenbaer
1
Probé varias otras soluciones, esta es la única que funciona. por cierto, para los novatos, el código <style> </style> debe estar en el encabezado de su xaml como en <Window><Window.Resource> <Style> ....
Felix
1
también, hay un error tipográfico en la respuesta: <Button Style="{StaticResource TransparentButton}"/>debería ser<Button Style="{StaticResource TransparentStyle}"/>
Felix
También funcionó para mí, ¡gran solución!
bbqchickenrobot
Me funcionó, ¡solución fantástica!
Contango
23

Lo que tienes que hacer es algo como esto:

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

Espero que esto sea lo que estabas buscando.

Editar: Lo siento, olvidé mencionar que si desea ver el borde del botón cuando pasa el cursor sobre la imagen, todo lo que tiene que hacer es omitir el Relleno = "- 4" .

Alfred B. Thordarson
fuente
1
Esto funciona, y esta es una muy buena idea en algunos casos
curiosidad
Esto funciona perfectamente cuando desea estirar una imagen dentro de un botón. Al quitar el relleno, la imagen ocupa las dimensiones completas del botón.
visc
23

No sé por qué otros no han señalado que esta pregunta está duplicada con esta con respuesta aceptada .

Cito aquí la solución: debe anular el ControlTemplatede 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
fuente
55
Si no coloca ningún contenido dentro del botón, no responderá a los clics. Puede solucionarlo envolviendo ese ContentPresenter en un borde con un fondo transparente. De esa manera, puede hacer un botón en blanco / transparente de cualquier tamaño para colocarlo sobre una imagen.
bj0
3

Puede usar hipervínculo en lugar de botón, de esta manera:

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

Es posible que ya sepa que colocar su botón dentro de una barra de herramientas le proporciona este comportamiento, pero si desea algo que funcione en TODOS los temas actuales con cualquier tipo de previsibilidad, deberá crear una nueva plantilla de control.

La solución de Prashant no funciona con un Botón que no está en una barra de herramientas cuando el Botón tiene el foco. Tampoco funciona al 100% con el tema predeterminado en XP: aún puede ver bordes grises tenues cuando el fondo del contenedor es blanco.

micatan
fuente
1

Programáticamente, puedes hacer esto:

btn.BorderBrush = new SolidColorBrush(Colors.Transparent);
Ricardo
fuente
1
No creo que esto pueda ser útil, ya que está buscando una solución en el lado de XAML
Mohamed Kamel Bouzekria
-1

¿Por qué no pones ambas cosas Background & BorderBrushigual?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
fuente