Wpf之图片按钮

本文介绍了在WPF中如何自定义图片按钮的样式,通过设置按钮模板和触发器,实现按钮背景的动态变化,提供了具体的XAML代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 Wpf之图片按钮

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

开发工具与关键技术: Visual Studio 2015 * SQL Server

作者:

撰写时间:2019年07月17日

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

在做项目中一般我们都不会使用按钮的原生按钮,在wpf中定义按钮的样式可以有很多,可以自定义改变它的样式,可以重写它的模板,接下来我说的是自定义改变它的样式,

先在页面写一个button的按钮

<Grid Margin="3">

                        <Grid.RowDefinitions>

                            <RowDefinition/>

                            <RowDefinition/>

                        </Grid.RowDefinitions>

                        <Button Grid.Row="0" Name="btnHospitalWork" Width="40"  Style="{StaticResource btnMenu}" Margin="11,0,11.4,32.6" Grid.RowSpan="2">

                            <Image Width="35" Height="35" Source="Images/0028.png" HorizontalAlignment="Center" VerticalAlignment="Center"/>

                        </Button>

                        <Label Grid.Row="1" Content="文件(F)" Height="25" Name="labHospitalWork" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="Black"/>

                    </Grid>

 

 

然后在资源字典写它的样式,引用,然后在button按钮上引用静态资源字典即可。

<Style x:Key="btnMenu" TargetType="Button">

        <!--SnapsToDevicePixels默认值false-->

        <Setter Property="SnapsToDevicePixels" Value="True"/>

        <Setter Property="OverridesDefaultStyle" Value="True"/>

        <Setter Property="Template">

            <Setter.Value>

                <ControlTemplate TargetType="{x:Type Button}">

                    <Grid>

                        <Ellipse Fill="{TemplateBinding Background}"/>

                        <Ellipse x:Name="RefractionLayer">

                            <!--椭圆填充色渐变-->

                            <Ellipse.Fill>

                                <RadialGradientBrush GradientOrigin="0.496, 1.052">

                                    <RadialGradientBrush.RelativeTransform>

                                        <!--变化效果合并-->

                                        <TransformGroup>

                                            <!--平移-->

                                            <!--平移:包含X、Y 两种属性,以原来的对象为坐标原点(0,0),然后向X轴、Y轴进行平移变换。-->

                                            <TranslateTransform X="0.02" Y="0.3"/>

                                            <!--缩放:包括属性ScaleX、ScaleY、CenterX、CenterY,其中ScaleX、ScaleY属性表示对象在X、Y轴进行缩放的倍数,使用CenterX 和 CenterY属性指定一个中心点。-->

                                            <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1.5" ScaleY="1.5"/>

 

                                        </TransformGroup>

 

                                    </RadialGradientBrush.RelativeTransform>

                                    <GradientStop Offset="1" Color="#00000000"/>

                                    <GradientStop Offset="0.4" Color="#FFFFFFFF"/>

                                </RadialGradientBrush>

 

                            </Ellipse.Fill>

                        </Ellipse>

                        <Path x:Name="ReflectionLayer" VerticalAlignment="Top" Stretch="Fill">

                            <Path.RenderTransform>

                                <ScaleTransform ScaleY="0.5"/>

                            </Path.RenderTransform>

                            <Path.Data>

                                <!--路径绘图-->

                                <PathGeometry>

                                    <PathFigure IsClosed="True" StartPoint="98.999,45.499">

                                        <BezierSegment Point1="98.999, 54.170" Point2="89.046, 52.258" Point3="85.502,51.029"/>

                                        <BezierSegment IsSmoothJoin="True"    Point1="75.860,47.685" Point2="69.111,45.196" Point3="50.167,45.196"/>

                                        <BezierSegment Point1="30.805,45.196" Point2="20.173,47.741" Point3="10.665,51.363"/>

                                        <BezierSegment IsSmoothJoin="True"    Point1="7.469,52.580"  Point2="1.000,53.252"  Point3="1.000,44.999"/>

                                        <BezierSegment Point1="1.000,39.510" Point2="0.884,39.227" Point3="2.519,34.286"/>

                                        <BezierSegment IsSmoothJoin="True"   Point1="9.106,14.370" Point2="27.875,0" Point3="50,0"/>

                                        <BezierSegment Point1="72.198,0" Point2="91.018,14.466" Point3="97.546,34.485"/>

                                        <BezierSegment IsSmoothJoin="True"  Point1="99.139,39.369" Point2="98.999,40.084" Point3="98.999,45.499"/>

                                    </PathFigure>

                                </PathGeometry>

                            </Path.Data>

                            <Path.Fill>

                                <RadialGradientBrush GradientOrigin="0.498, 0.526">

                                    <RadialGradientBrush.RelativeTransform>

                                        <TransformGroup>

                                            <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1" ScaleY="1.997"/>

                                            <TranslateTransform X="0" Y="0.5"/>

                                        </TransformGroup>

                                    </RadialGradientBrush.RelativeTransform>

                                    <GradientStop Offset="1" Color="#FFFFFFFF"/>

                                    <GradientStop Offset="0.85" Color="#92FFFFFF"/>

                                    <GradientStop Offset="0" Color="#00000000"/>

                                </RadialGradientBrush>

                            </Path.Fill>

                        </Path>

                        <ContentPresenter Margin="0,2,0,0" HorizontalAlignment="Center" VerticalAlignment="Center"/>

                    </Grid>

                    <!--定义触发器-->

                    <ControlTemplate.Triggers>

                        <!--触发器:鼠标悬停-->

                        <Trigger Property="IsMouseOver" Value="True">

                            <Setter TargetName="RefractionLayer" Property="Fill">

                                <Setter.Value>

                                    <!--径向渐变-->

                                    <RadialGradientBrush GradientOrigin="0.496, 1.052">

                                        <RadialGradientBrush.RelativeTransform>

                                            <TransformGroup>

                                                <!--缩放变化-->

                                                <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1.5" ScaleY="1.5"/>

                                                <!--平移变化-->

                                                <TranslateTransform X="0.02" Y="0.3"/>

                                            </TransformGroup>

                                        </RadialGradientBrush.RelativeTransform>

                                        <GradientStop Offset="1" Color="#00000000"/>

                                        <GradientStop Offset="0.45" Color="#FFFFFFFF"/>

                                    </RadialGradientBrush>

                                </Setter.Value>

                            </Setter>

                            <Setter TargetName="ReflectionLayer" Property="Fill">

                                <Setter.Value>

                                    <RadialGradientBrush GradientOrigin="0.498, 0.526">

                                        <RadialGradientBrush.RelativeTransform>

                                            <TransformGroup>

                                                <ScaleTransform  CenterX="0.5" CenterY="0.5"  ScaleX="1" ScaleY="1.997"/>

                                                <TranslateTransform X="0" Y="0.5"/>

                                            </TransformGroup>

                                        </RadialGradientBrush.RelativeTransform>

                                        <GradientStop Offset="1" Color="#CCFFFFFF"/>

                                        <GradientStop Offset="0.85" Color="#66FFFFFF"/>

                                        <GradientStop Offset="0" Color="#00000000"/>

                                    </RadialGradientBrush>

                                </Setter.Value>

                            </Setter>

                        </Trigger>

                    </ControlTemplate.Triggers>

                </ControlTemplate>

            </Setter.Value>

        </Setter>

    </Style>

                            

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值