前言
首先ICON按钮,即带图标按钮,即图标按钮。
图标按钮在开发时,主要是有两种方式来进行。一是在Button的Content内添加Image,然后设置Image的属性Source来实现,这种方式主要是简单易操作,对于初学者来说,很快就能掌握;二是通过Style来实现,此在初学是比较麻烦的,需要对style足够熟悉后才能掌握。
随着技术的发展,目前使用字体图标来替代图片图标已经是一种趋势。使用字体图标的好处:字体图标是矢量图,放大不存在失真问题;再就是字体图标设置颜色,可根据需要,由开发者自行决定,这为美工减少了大量的工作(美工不再需要为同一个图标制作多种颜色的图标,而只需要制作一个),同时软件可以集中管理图标的颜色,便于软件风格的切换。
也就是说当下制作图标按钮,算上字体图标的加入的话,可以说有了3种主要的方法。(本文不讲如何获取或制作字体图标,做法参考文末给出的参考。)
实现
下述代码演示的是以Style的形式来完成IconButon的制作:
<Windowx:Class="DicomReader.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:local="clr-namespace:DicomReader"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"Title="DicomReader"Width="1200"Height="800"Background="#353535"mc:Ignorable="d"><Window.Resources><Style x:Key="IconButtonTb" TargetType="TextBlock"><Setter Property="FontFamily" Value="pack://application:,,,/DicomReader;component/Fonts/#iconfont" /><Setter Property="FontSize" Value="30" /><Setter Property="Foreground" Value="White" /><Setter Property="FontWeight" Value="Bold" /></Style><Style x:Key="IconButton" TargetType="Button"><Setter Property="Background" Value="#333337" /><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="Button"><Grid Background="{TemplateBinding Background}"><!--<Ellipse Fill="{TemplateBinding Background}" />--><TextBlockHorizontalAlignment="Center"VerticalAlignment="Center"Style="{StaticResource IconButtonTb}"Text="{TemplateBinding Content}" /></Grid></ControlTemplate></Setter.Value></Setter></Style><Style TargetType="Grid"><Setter Property="Background" Value="#252525" /></Style></Window.Resources><Grid><Grid.ColumnDefinitions><ColumnDefinition Width="*" /><ColumnDefinition Width="4*" /></Grid.ColumnDefinitions><StackPanel Orientation="Vertical"><Grid Height="50"><Grid.ColumnDefinitions><ColumnDefinition Width="*" /><ColumnDefinition Width="*" /><ColumnDefinition Width="*" /><ColumnDefinition Width="*" /><ColumnDefinition Width="*" /></Grid.ColumnDefinitions><Buttonx:Name="OpenDicom"Grid.Column="0"Content=""Style="{StaticResource IconButton}"ToolTip="打开DICOM文件夹" /><ButtonGrid.Column="1"Content=""Style="{StaticResource IconButton}"ToolTip="快速浏览" /><ButtonGrid.Column="3"Content=""Style="{StaticResource IconButton}"ToolTip="3D浏览" /><ButtonGrid.Column="2"Content=""Style="{StaticResource IconButton}"ToolTip="MRP浏览" /><ButtonGrid.Column="4"Content=""Style="{StaticResource IconButton}"ToolTip="融合浏览" /></Grid><Grid Height="Auto" Margin="0,10" /></StackPanel><Grid Grid.Column="1" /></Grid>
</Window>
显示效果
注意
上述代码中的<Setter Property="FontFamily" Value="pack://application:,,,/DicomReader;component/Fonts/#iconfont" />这句代码中的DicomReader是项目上名,Fonts是项目下的Fonts文件夹,iconfont是字体文件名(注意在字体文件名前的#号,必须要有)。
设置控件的style时,注意StaticResource后写的的style的key值,若你将你所写的style命名时命名的是x:Name,将会导致在写完StaticResource时没有智能提示,强行写下你style名称时也会报错。此请一定要注意。
另就是一定要将字体文件输出,否则字体图标不能正常显示。
其它做法
在正常将字体图标输出的情况下,下述代码也是可行的。但不推荐此做法,原因就不说了。
<Grid Height="Auto" Margin="0,10"><Button Background="Aqua"><TextBlock Text="" /></Button>
</Grid>
字体图标制作方法
关于如何制作自己的字体图标,请参考WPF 字体图标的使用 - lxiamul - 博客园。感谢博主对于字体图标的分享。