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库写图标按钮的主要内容,如果未能解决你的问题,请参考以下文章