WPF中使用样式的透明按钮背景

Posted

技术标签:

【中文标题】WPF中使用样式的透明按钮背景【英文标题】:Transparent button background in WPF using style 【发布时间】:2014-02-05 10:22:03 【问题描述】:

我找到了关于将按钮的边框设置为透明的主题。 这很好用,但我想将它用于按钮背景而不是边框​​。

我在<Window.Resources>...</Window.Resources> 中放入的链接中的解决方案:

<Style TargetType="x:Type Button">
    <Setter Property="Background" Value="Green"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="x:Type Button">
                <Border Background="TemplateBinding Background">
                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Background" Value="Red"/>
        </Trigger>
    </Style.Triggers>
</Style>

来源:How do you change Background for a Button MouseOver in WPF?

如何编辑此代码以便我可以使用它将按钮的背景设置为透明而不是它的边框?

【问题讨论】:

【参考方案1】:

试试这个 sn-p 的透明按钮:

<Button Style="StaticResource x:Static ToolBar.ButtonStyleKey" BorderThickness="0">
    <-- PUT BUTTON CONTENT HERE e.g. a Image -->
</Button>

【讨论】:

虽然这显示一个透明按钮,但当您按下它时,背景不再透明。【参考方案2】:

找到了我的问题的解决方案:

显然,您必须在 ControlTemplate.Trigger 下的 ControlTemplate 中添加触发器。并且在你完成之后,你必须在边框标签中设置一个 TargetName,然后将引用 (-> TargetName="XXXXX") 设置为你在边框标签中命名的属性。

所以:

<Window.Resources>
<Style x:Key="MenuButton" TargetType="Button">
    <Setter Property="Background" Value="Transparent"/>
    <Setter Property="Height" Value="40" />
    <Setter Property="Width" Value="Auto" />
    <Setter Property="Foreground" Value="White" />
    <Setter Property="Margin" Value="45,0,0,0" />

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="x:Type Button">
                <Grid>
                <Border Name="MenuBorder" SnapsToDevicePixels="True" BorderBrush="Black" Background="TemplateBinding Background" BorderThickness="0,0,0,2" >
                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                </Border>
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="Button.IsFocused" Value="True">
                        <Setter Property="Background" Value="Transparent"/>
                        <Setter TargetName="MenuBorder" Property="BorderBrush" Value="#FFED6A2B" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

【讨论】:

但是有问题你没有写关于 isfoused 属性。你写的是 ismouseover 和 evrytime 不需要目标名称。你需要目标名称,因为你在那里添加了额外的网格。无论如何你找出你的解决方案。它很好。 是的,我添加了一些额外的属性并将属性更改为 IsFocused,但这不是问题所在。这只是关于背景部分,除了标准按钮样式之外,我无法解决在其他情况下使其透明的问题。我必须添加 部分和 TargetName 才能解决我的问题。休息只是我自己的东西的改变(更新)。【参考方案3】:

改变这一行

<Setter Property="Background" Value="Red"/>

<Setter Property="Background" Value="Transparent"/>

【讨论】:

【参考方案4】:

在 C# 代码中使用它

Button btn = new Button() BorderBrush=System.Windows.Media.Brushes.Transparent, 
                               BorderThickness = new Thickness(0);

yourBtn.BorderBrush=System.Windows.Media.Brushes.Transparent;
yourBtn.BorderThickness =new Thickness(0);

【讨论】:

以上是关于WPF中使用样式的透明按钮背景的主要内容,如果未能解决你的问题,请参考以下文章

WPF 按钮无边框无背景

c#编程wpf按钮边框带有白边!

如何让button按钮变成透明

wpf按钮背景悬停颜色

Windows窗体按钮背景透明

QQ的一些图标是隐藏了按钮的边框 但是鼠标放在上面又出现了 想问一下如何用WPF实现的