2009-06-15 33 views
109

Estoy tratando de crear un botón que tenga una imagen y sin borde, al igual que los botones de la barra de herramientas de Firefox antes de colocar el cursor sobre ellos y ver el botón completo.¿Cómo se elimina completamente el borde del botón en wpf?

He tratado de establecer la BorderBrush-Transparent, BorderThickness-0, y también trató BorderBrush="{x:Null}", pero todavía se puede ver el contorno del botón.

+1

alt ** [respuesta] (http://stackoverflow.com/a/ 7770227/503501) ** –

+0

Un botón sin bordes en WPF? !!! ¿Qué crees que es esto, un marco intuitivo de interfaz de usuario? –

Respuesta

2

Quizás ya sepas que poner tu Botón dentro de una Barra de Herramientas te da este comportamiento, pero si quieres algo que funcione en TODOS los temas actuales con algún tipo de predictibilidad, necesitarás 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 foco. Tampoco funciona al 100% con el tema predeterminado en XP: aún puede ver bordes grises tenues cuando el fondo de su contenedor es blanco.

217

probar este

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

¡Fantástico! Cada otra solución que he encontrado es extremadamente intrincada e implica anular todo el diseño del botón. – Jonathan

+7

Desafortunadamente, desactiva el efecto de establecer 'HorizontalContentAlignment' en' Stretch'. –

+0

Dice "x: Static no es compatible con un proyecto de Silverlight." –

22

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> 

Hope esto es lo que estaba buscando.

Editar: Lo sentimos, se olvidó de mencionar que si quieres ver el botón de la frontera cuando se pasa sobre la imagen, todo lo que tiene que hacer es omitir la Relleno = "- 4".

+13

Esto simplemente no lo hace t work. – Thiru

+1

Esto funciona, y esta es una idea muy buena en algunos casos – curiousity

+0

Esto funciona perfectamente cuando se desea estirar una imagen dentro de un botón. Eliminar el relleno permite que la imagen ocupe las dimensiones del botón completo – visc

3

Se puede utilizar en lugar del botón de hipervínculo, así:

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

no sé por qué otros no han señalado que esta cuestión se duplica con this one with accepted answer.

cito aquí la solución: Es necesario para anular el ControlTemplate del 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

Si no lo pones cualquier contenido dentro del botón no responderá a los clics. Puede x que envolviendo ese ContentPresenter en un borde con un fondo transparente. De esta forma, puede hacer que un botón en blanco/transparente de cualquier tamaño se coloque sobre una imagen. – bj0

36

Puede que tenga que cambiar la plantilla de botones, esto le dará un botón con ningún marco de lo que nunca, pero también sin ningún tipo de prensa o efecto discapacitados:

<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}"/> 
+0

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 de 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 debe estar en el encabezado de su xaml como en