前言
首先ICON按钮,即带图标按钮,即图标按钮。
图标按钮在开发时,主要是有两种方式来进行。一是在Button的Content内添加Image,然后设置Image的属性Source来实现,这种方式主要是简单易操作,对于初学者来说,很快就能掌握;二是通过Style来实现,此在初学是比较麻烦的,需要对style足够熟悉后才能掌握。
随着技术的发展,目前使用字体图标来替代图片图标已经是一种趋势。使用字体图标的好处:字体图标是矢量图,放大不存在失真问题;再就是字体图标设置颜色,可根据需要,由开发者自行决定,这为美工减少了大量的工作(美工不再需要为同一个图标制作多种颜色的图标,而只需要制作一个),同时软件可以集中管理图标的颜色,便于软件风格的切换。
也就是说当下制作图标按钮,算上字体图标的加入的话,可以说有了3种主要的方法。(本文不讲如何获取或制作字体图标,做法参考文末给出的参考。)
实现
下述代码演示的是以Style的形式来完成IconButon的制作:
<Window
x: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}" />-->
<TextBlock
HorizontalAlignment="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>
<Button
x:Name="OpenDicom"
Grid.Column="0"
Content=""
Style="{StaticResource IconButton}"
ToolTip="打开DICOM文件夹" />
<Button
Grid.Column="1"
Content=""
Style="{StaticResource IconButton}"
ToolTip="快速浏览" />
<Button
Grid.Column="3"
Content=""
Style="{StaticResource IconButton}"
ToolTip="3D浏览" />
<Button
Grid.Column="2"
Content=""
Style="{StaticResource IconButton}"
ToolTip="MRP浏览" />
<Button
Grid.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 - 博客园。感谢博主对于字体图标的分享。