2010-01-14 16 views
17

Wie man einen Knopf flachen Stil in WPF machen? Ich habe BasedOn-Eigenschaft versucht, aber es funktioniert nicht.wpf flacher knopf

+8

Siehe auch: http://stackoverflow.com/questions/697381/setting-button-flatstyle-in-wpf vor allem, wenn Sie One-Liner mögen. – greenoldman

Antwort

22

Nur zum Einstieg:

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

Dann haben Sie eine Millon andere Möglichkeiten, es zu tun, auch die ControlTemplate Wechsel zu voll auf den Button

+2

Kann nicht funktionieren. Ihr Beispielstil entfernt den Rahmen oder Hintergrund eines Buttons nicht. Das einzige, was in diesem Beispiel funktioniert, ist, dass der Text der Schaltfläche beim Hover fett dargestellt wird. – Johncl

+0

@ Johncl siehe meine Antwort unter –

1

Schnell Lösung neu zu definieren: eingefügt auf die Schaltfläche in einem <ToolBar/>

Haftungsausschluss: Wird eine Symbolleiste Chrom hinzugefügt, kann in einigen Fällen ein Problem sein. (Danke Indeera)

+0

Dies fügt eine Symbolleiste Chrom und löst das Problem nicht. – Indy9000

+0

Fügt eine Symbolleiste hinzu chrome: yes; Löst das Problem nicht: subjektiv –

6

Eduardo Antwort hinzuzufügen, wird diese Lösung von jedem zusätzlichen Styling befreien, wie die Grenze um den Knopf, wenn die Dicke auf 0

gesetzt Sie zusätzliche Styling hinzufügen können je nach Bedarf:

<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

Eine weitere Verbesserung würde ich hinzufügen, um 'SnapsToDevicePixels =" True "' für '' zu setzen. Dies würde jegliche verschwommene Grenzlinien eliminieren, falls der Benutzer 'BorderThickness' auf einen Wert ungleich Null setzt. – DaveS

22

Weitere einfache Lösung hier bereits mit definierten Symbolleiste auf die Schaltfläche Stil:

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

Wenn Sie nur die Taste vornehmen müssen „unsichtbar“ aber Highlight fähig:

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

Verwandte Themen