2010-01-14 39 views
17

如何在wpf中制作按钮平面样式? 我试过BasedOn属性,但它不起作用。wpf平面按钮

+8

另请参阅:http://stackoverflow.com/questions/697381/setting-button-flatstyle-in-wpf特别是如果你喜欢单线。 – greenoldman 2011-04-24 11:07:12

回答

22

只是为了让你开始:

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

然后你有一个米伦等方式来做到这一点,甚至改变了ControlTemplate完成重新定义按钮

+2

无法让此工作。您的示例样式不会删除Button的边框或背景。从这个例子中唯一可行的是,按钮文本在悬停时变为粗体。 – Johncl 2011-11-28 15:25:24

+0

@Johncl在下面看到我的答案 – 2013-01-20 05:15:45

1

快速的解决方案:嵌入按钮在<ToolBar/>

声明:将添加一个工具栏铬,在某些情况下可能是一个问题。 (感谢Indeera)

+0

这增加了一个工具栏镶边,并不能解决问题。 – Indy9000 2012-02-27 14:16:41

+0

添加工具栏chrome:yes;不解决问题:主观 – 2012-03-11 15:10:35

6

要添加到爱德华多的答案,该解决方案摆脱任何额外的造型,如按钮周围的边框如果厚度设置为0

您可以根据需要添加额外的样式:

<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

我要添加的另一个改进是为''设置'SnapsToDevicePixels =“True”'。如果用户将BorderThickness设置为非零值,这将消除任何模糊的边界线。 – DaveS 2018-03-08 01:40:10

22

更简单的解决方案在这里使用已定义工具栏按钮的风格:

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

如果你只是需要让按钮“隐形”,但亮点能够:

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