WPF 模仿IconPacks库写图标按钮

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF 模仿IconPacks库写图标按钮相关的知识,希望对你有一定的参考价值。

先上原链接,一个很不错的wpf图标库 : 

https://github.com/MahApps/MahApps.Metro.IconPacks

提供了大量的图标可以用,如下图:(部分截图)

简单分析了一下代码,

并模仿它写一个图标类和简单的使用示例:

App.xaml:

<Application x:Class="IconPackMini.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:IconPackMini"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <Style TargetType="local:IconButton">
            <Setter Property="FontFamily" Value="微软雅黑"/>
            <Setter Property="FontSize" Value="14"/>
            <Setter Property="Foreground" Value="Black"/>
            <Setter Property="BorderThickness" Value="0"/>
            <Setter Property="Margin" Value="0"/>
            <Setter Property="Padding" Value="0"/>
            <Setter Property="FocusVisualStyle" Value="x:Null"/>
            <Setter Property="SnapsToDevicePixels" Value="True"/>
            <Setter Property="UseLayoutRounding" Value="True"/>
            <Setter Property="Background" Value="Transparent"/>
            <Setter Property="SnapsToDevicePixels" Value="True"/>
            <Setter Property="Padding" Value="5"/>
            <Setter Property="Cursor" Value="Hand"/>
            <Setter Property="Width" Value="32"/>
            <Setter Property="Height" Value="Binding ActualWidth,RelativeSource=RelativeSource Self"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="local:IconButton">
                        <Border x:Name="_border" CornerRadius="TemplateBinding CornerRadius"
                            ClipToBounds="True"
                            BorderThickness="TemplateBinding BorderThickness"
                            BorderBrush="TemplateBinding BorderBrush"
                            Background="TemplateBinding Background">
                            <Viewbox Margin="TemplateBinding Padding"
                                 Stretch="Uniform">
                                <Path x:Name="_path"
                                  Width="TemplateBinding PathWidth"
                                  Height="TemplateBinding PathHeight"
                                  Fill="TemplateBinding Foreground" 
                                  Data="TemplateBinding Geometry"/>
                            </Viewbox>
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsMouseOver" Value="True" SourceName="_border">
                                <Setter Property="Background" Value="Binding HoverBackground,RelativeSource=RelativeSource AncestorType=local:IconButton" TargetName="_border"/>
                                <Setter Property="Fill" Value="Binding HoverForeground,RelativeSource=RelativeSource AncestorType=local:IconButton" TargetName="_path"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
</Style>
    </Application.Resources>
</Application>

iconKey 枚举类:

namespace IconPackMini

    public enum IconKey
    
        None,
        /// <summary>
        /// 关闭按钮
        /// </summary>
        Close,
        /// <summary>
        /// 最小化按钮
        /// </summary>
        MinSize,
        /// <summary>
        /// 普通最大化按钮
        /// </summary>
        MaxSize,
        /// <summary>
        /// 全屏后最大化按钮
        /// </summary>
        MaxToNormal,
        /// <summary>
        /// 设置按钮
        /// </summary>
        Setting,
        /// <summary>
        /// 五角星
        /// </summary>
        Star,
    

还有大部分控件类代码,都放在仓库内,自取。

扩展也很简单,使用时,取得path后,添加新图标到IconKey 和IconKeyDic内就可以了,对于不想引用类库又想用的人,还行。

效果图:

【原创】转载请注明出处。

【加群】要加入 WPF UI 微信群的,可以添加我的微信。

【资源】代码仓库地址:https://gitee.com/gxygitee/pub.git

以上是关于WPF 模仿IconPacks库写图标按钮的主要内容,如果未能解决你的问题,请参考以下文章

材料设计 wpf 图标按钮不停靠在右侧

如何使用 WPF 按钮的参数或绑定来更改 XAML 样式中的 fa 图标

HTML代码片段

HTML代码片段

WPF 给Button按钮加小图标图片Image

WPF 给Button按钮加小图标图片Image