2010-01-14 12 views
17

Jak zrobić płaski przycisk w WPF? Próbowałem właściwości BasedOn, ale nie działa.Przycisk płaski wpf

+8

Zobacz także: http://stackoverflow.com/questions/697381/setting-button-flatstyle-in-wpf szczególnie jeśli lubisz jedno-liniowce. – greenoldman

Odpowiedz

22

Wystarczy Ci zacząć:

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

Wtedy masz jeden Millon inne sposoby, aby to zrobić, nawet zmieniając ControlTemplate aby zakończyć przedefiniować przycisk

+2

Nie mogę tego zrobić. Twój przykładowy styl nie usuwa obramowania ani tła przycisku. Jedyną rzeczą, która działa z tego przykładu, jest to, że tekst na przycisku jest pogrubiony po najechaniu myszą. – Johncl

+0

@Johncl zobacz moją odpowiedź poniżej –

1

szybkie rozwiązanie: Wstaw przycisk w <ToolBar/>

Nota prawna: spowoduje dodanie chromowanego paska narzędzi, może to być problem w niektórych przypadkach. (Dzięki Indeera)

+0

Dodaje chrome paska narzędzi i nie rozwiązuje problemu. – Indy9000

+0

Dodaje pasek narzędziowy chrome: yes; Nie rozwiązuje problemu: subiektywna –

6

Aby dodać odpowiedź Eduardo, ten roztwór pozbywa żadnych dodatkowych stylizacji takie jak obramowania wokół przycisku jeśli grubość jest ustawiona na 0.

Możesz dodać dodatkową stylizację, ile potrzeba:

<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

Kolejną poprawą, którą chciałbym dodać, jest ustawienie 'SnapsToDevicePixels =" True "' dla ''. Wyeliminowałoby to wszelkie rozmyte linie graniczne, gdyby użytkownik ustawił "grubość obramowania" na wartość niezerową. – DaveS

22

bardziej proste rozwiązanie tutaj używając już zdefiniowany styl przycisku paska narzędzi:

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

Jeśli wystarczy, aby przycisk „niewidzialne”, ale punktem kulminacyjnym stanie:

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

Powiązane problemy