2010-01-14 28 views
17

¿Cómo hacer un botón estilo plano en wpf? He intentado con la propiedad BasedOn pero no funciona.wpf botón plano

+8

Vea también: http://stackoverflow.com/questions/697381/setting-button-flatstyle-in-wpf, especialmente si le gustan las frases sueltas. – greenoldman

Respuesta

22

Sólo para empezar:

<Page 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Page.Resources> 
    <Style x:Key="Flat"> 
     <Setter Property="Control.Background" Value="{x:Null}" /> 
     <Setter Property="Control.BorderBrush" Value="{x:Null}" /> 
     <Style.Triggers> 
      <Trigger Property="Control.IsMouseOver" Value="True"> 
       <Setter Property="Control.Background" Value="{x:Null}" /> 
       <Setter Property="Control.BorderBrush" Value="{x:Null}" /> 
       <Setter Property="Control.FontWeight" Value="Bold" /> 
      </Trigger> 
      <Trigger Property="Control.IsFocused" Value="True"> 
       <Setter Property="Control.FontWeight" Value="Bold" /> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
    </Page.Resources> 
    <StackPanel> 
    <Button Style="{StaticResource Flat}">Hello</Button> 
    </StackPanel> 
</Page> 

Entonces usted tiene un millon otras maneras de hacerlo, incluso un tiempo ControlTemplate para completar redefinir el botón

+2

No puedo hacer que esto funcione. Su estilo de ejemplo no elimina el borde o el fondo de un Botón. Lo único que funciona de este ejemplo es que el texto del botón se convierte en negrita al desplazarse. – Johncl

+0

@Johncl ver mi respuesta debajo de –

1

solución rápida: incrustar el botón en un <ToolBar/>

Descargo de responsabilidad: Agregará una barra de herramientas de cromo, puede ser un problema en algunos casos. (Gracias Indeera)

+0

Esto agrega una barra de herramientas de cromo y no resuelve el problema. – Indy9000

+0

Agrega una barra de herramientas chrome: yes; No resuelve el problema: subjetiva –

6

Para añadir a la respuesta de Eduardo, esta solución se deshace de cualquier estilo adicional, como el borde del botón si el espesor se establece en 0.

Puede agregar más de estilo, según sea necesario:

<Style x:Key="Flat" TargetType="Button"> 
    <Setter Property="Background" Value="{x:Null}" /> 
    <Setter Property="BorderBrush" Value="{x:Null}" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Button}"> 
       <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}"> 
        <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
       </Border> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsKeyboardFocused" Value="true"> 
        </Trigger> 
        <Trigger Property="IsDefaulted" Value="true"> 
        </Trigger> 
        <Trigger Property="IsPressed" Value="true"> 
        </Trigger> 
        <Trigger Property="ToggleButton.IsChecked" Value="true"> 
        </Trigger> 
        <Trigger Property="IsEnabled" Value="false"> 
         <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="Background" Value="{x:Null}" /> 
      <Setter Property="BorderBrush" Value="{x:Null}" /> 
      <Setter Property="FontWeight" Value="Normal" /> 
     </Trigger> 
     <Trigger Property="IsFocused" Value="True"> 
      <Setter Property="FontWeight" Value="Normal" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 
+0

Otra mejora que agregaría es establecer 'SnapsToDevicePixels =" True "' para ''. Esto eliminaría cualquier borde borroso en caso de que el usuario establezca 'BorderThickness' en un valor distinto de cero. – DaveS

22

solución más sencilla aquí usando ya definido estilo del botón de barra de herramientas:

<Button Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}" 
     Content="You know I'm flat..." /> 
0

Si sólo tiene que hacer que el botón "invisible", pero lo más destacado capaz:

bb.Background = new SolidColorBrush (Colors.White); bb.BorderBrush = new SolidColorBrush (Colors.White);