wpf flat button

前端 未结 5 1944
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-01 08:03

How to make a button flat style in wpf? I\'ve tried BasedOn property but it does not work.

相关标签:
5条回答
  • 2020-12-01 08:21

    Just to get you started:

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

    Then you have one millon other ways to do it, even changing the ControlTemplate to complete redefine the Button

    0 讨论(0)
  • 2020-12-01 08:25

    Quick solution: Embed the button in a <ToolBar/>

    Disclaimer: Will add a toolbar chrome, may be an issue in some cases. (Thanks Indeera)

    0 讨论(0)
  • 2020-12-01 08:27

    To add to Eduardo's answer, this solution gets rid of any extra styling such as the border around the button if the thickness is set to 0.

    You can add extra styling as needed:

    <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 讨论(0)
  • 2020-12-01 08:38

    More simple solution here using already defined ToolBar button style :

    <Button Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}"
            Content="You know I'm flat..." />
    
    0 讨论(0)
  • 2020-12-01 08:43

    If you just need to make the button "invisible" but highlightable:

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

    0 讨论(0)
提交回复
热议问题