WPF 员工卡条形码

简介:

  大家都知道条形码(Barcode)是一种可以由机器识别的特殊编码,在生产、生活中也常常会见到并使用它。条形码的类型和种类很多感兴趣的朋友可以详细了解一下。其中Code 39 可以说是一种最为常见并广泛使用的字符与数字结合的编码类型,本篇也将利用它制作一个带有条形码的员工卡应用程序。

     在公司内部员工卡是员工身份唯一的识别工具,同时也是考勤及门禁系统的主要信息来源。首先在WPF 中设计一个简单的员工卡样式,具备员工卡标识、员工相片、员工姓名等。

<Border CornerRadius="3" BorderBrush="Gray" BorderThickness="2" Background="White"
        MouseLeftButtonDown="Border_MouseLeftButtonDown">
    <Canvas x:Name="mainCanvas">
        <Grid x:Name="closeBtn" Canvas.Left="330" Canvas.Top="0" 
              MouseLeftButtonDown="Close_MouseLeftButtonDown">
            <Ellipse Height="15" Width="15" HorizontalAlignment="Center">
                <Ellipse.Fill>
                    <SolidColorBrush x:Name="ellipseColor"/>
                </Ellipse.Fill>
            </Ellipse>
            <TextBlock Text="x" Margin="2,-2,2,2" HorizontalAlignment="Center">
                <TextBlock.Foreground>
                    <SolidColorBrush x:Name="textColor" Color="Gray"/>
                </TextBlock.Foreground>
            </TextBlock>
        </Grid>

        <Border BorderBrush="#FF54545C" Canvas.Top="25" CornerRadius="5"
                Height="49" Width="339" Background="#FF2192C4" Canvas.Left="5">
            <TextBlock Text="EMPLOYEE   CARD" Foreground="White" FontSize="20"
                       VerticalAlignment="Center" HorizontalAlignment="Center"
                       FontWeight="Black" FontFamily="Microsoft Sans Serif"/>
        </Border>
        <Grid Canvas.Left="96" Canvas.Top="78">
            <Grid.RowDefinitions>
                <RowDefinition />
                <RowDefinition />
            </Grid.RowDefinitions>
            <Image Source="Images/cardpic.png" Grid.Row="0"/>
            <TextBlock Text="Li Jing Ran" FontSize="30" FontWeight="Black" 
                       Grid.Row="1" HorizontalAlignment="Center"/>
        </Grid>
    </Canvas>
</Border>

Image

     代码内容比较简单,其中需要提一下的是x:Name 为closeBtn 的<Grid>,可以看到它包含了一个<Ellipse>和<Textblock>,它们的颜色填充方式看上去做的很复杂。其实是为了实现一个动态效果:当鼠标移动到关闭图标上时,其<Ellipse>和<Textblock>会改变颜色(如下图对比)。

normal   change

     该效果代码如下,通过Window.Resources 设置一个ColorAnimation Storyboard,再通过MouseEnter、MouseLeave 来触发Storyboard 动画效果。

<Window.Resources>
    <Storyboard x:Key="flashClose">
        <ColorAnimation Storyboard.TargetName="ellipseColor" 
                        Storyboard.TargetProperty="Color"
                        From="White" To="Gray" Duration="0:0:0.1"/>
        <ColorAnimation Storyboard.TargetName="textColor" 
                        Storyboard.TargetProperty="Color"
                        From="Gray" To="White" Duration="0:0:0.1"/>
    </Storyboard>
</Window.Resources>
<Window.Triggers>
    <EventTrigger SourceName="closeBtn" RoutedEvent="Grid.MouseEnter">
        <BeginStoryboard x:Name="showClosBtn" Storyboard="{StaticResource flashClose}"/>
    </EventTrigger>
    <EventTrigger SourceName="closeBtn" RoutedEvent="Grid.MouseLeave">
        <StopStoryboard BeginStoryboardName="showClosBtn"/>
    </EventTrigger>
</Window.Triggers>

     完成上面的界面设计,最后只需在员工卡下放的空白处添加员工编号条形码即可。首先在项目中加入Barcode 和Code39 类,我们要通过这两个类完成条形码的绘制工作。打开C#程序,编写如下代码。

定义编码

     通过Barcodes 类创建一个新的条形码,定义BarcodeType 为"Code39",编码Data 为“10001”,如果需要校验则将CheckDigit 设为"Yes"。其中thinWidth、thickWidth 用于定义黑白条码的宽窄度。

Barcodes bb = new Barcodes();
bb.BarcodeType = Barcodes.BarcodeEnum.Code39;
bb.Data = "10001";
bb.CheckDigit = Barcodes.YesNoEnum.Yes;
bb.encode();

int thinWidth;
int thickWidth;
            
thinWidth = 2;
thickWidth = 3 * thinWidth;

string outputString = bb.EncodedData;
string humanText = bb.HumanText;

绘制条形码

根据编码(EncodedData)的长度利用Rectangle 类逐一绘制黑、白条码,t 表示窄码,w 表示宽码。

int len = outputString.Length;
int currentPos = 50;
int currentTop = 340;
int currentColor = 0;            
for (int i = 0; i < len; i++)
{
    Rectangle rect = new Rectangle();
    rect.Height = 80;
    if (currentColor == 0)
    {
        currentColor =  1;
        rect.Fill = new SolidColorBrush(Colors.Black);
    }
    else
    {
        currentColor = 0;
        rect.Fill = new SolidColorBrush(Colors.White);
    }
    Canvas.SetLeft(rect, currentPos);
    Canvas.SetTop(rect, currentTop);

    if (outputString[i] == 't')
    {
        rect.Width = thinWidth;
        currentPos += thinWidth;
    }
    else if (outputString[i] == 'w')
    {
        rect.Width = thickWidth;
        currentPos += thickWidth;
    }             
    mainCanvas.Children.Add(rect);
}

添加可读码

最后在条形码下方添加一行可读码,方便员工认读条形码内容,也就是将“10001”员工编号显示出来。

TextBlock tb = new TextBlock();
tb.Text = humanText;
tb.FontSize = 25;
tb.FontFamily = new FontFamily("Consolas");
Rect rx = new Rect(0, 0, 0, 0);
tb.Arrange(rx);
Canvas.SetLeft(tb, 120);
Canvas.SetTop(tb, currentTop + 80);
mainCanvas.Children.Add(tb);

效果图

最后运行下程序看看效果如何,当然条形码内容可按各自需求添加任何字符或数字。

Image

源代码下载

WPFBarcode.zip






本文转自Gnie博客园博客,原文链接:http://www.cnblogs.com/gnielee/archive/2010/07/26/wpf-employee-card-with-barcode.html,如需转载请自行联系原作者


相关文章
|
C#
一起谈.NET技术,WPF 员工卡条形码
大家都知道条形码(Barcode)是一种可以由机器识别的特殊编码,在生产、生活中也常常会见到并使用它。条形码的类型和种类很多感兴趣的朋友可以详细了解一下。其中Code 39 可以说是一种最为常见并广泛使用的字符与数字结合的编码类型,本篇也将利用它制作一个带有条形码的员工卡应用程序。
969 0
|
5月前
|
C# 开发者 Windows
基于Material Design风格开源、易用、强大的WPF UI控件库
基于Material Design风格开源、易用、强大的WPF UI控件库
333 0
|
5月前
|
C#
浅谈WPF之装饰器实现控件锚点
使用过visio的都知道,在绘制流程图时,当选择或鼠标移动到控件时,都会在控件的四周出现锚点,以便于修改大小,移动位置,或连接线等,那此功能是如何实现的呢?在WPF开发中,想要在控件四周实现锚点,可以通过装饰器来实现,今天通过一个简单的小例子,简述如何在WPF开发中,应用装饰器,仅供学习分享使用,如有不足之处,还请指正。
120 1
|
C# Windows
WPF技术之RichTextBox控件
WPF RichTextBox是Windows Presentation Foundation (WPF)中提供的一个强大的文本编辑控件,它可以显示富文本格式的文本,支持多种文本处理操作。
545 0
|
2月前
|
开发框架 缓存 前端开发
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(11) -- 下拉列表的数据绑定以及自定义系统字典列表控件
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(11) -- 下拉列表的数据绑定以及自定义系统字典列表控件
|
2月前
|
C# 开发者 Windows
一款基于Fluent设计风格、现代化的WPF UI控件库
一款基于Fluent设计风格、现代化的WPF UI控件库
|
2月前
|
C# 前端开发 UED
WPF数据验证实战:内置控件与自定义规则,带你玩转前端数据验证,让你的应用程序更上一层楼!
【8月更文挑战第31天】在WPF应用开发中,数据验证是确保输入正确性的关键环节。前端验证能及时发现错误,提升用户体验和程序可靠性。本文对比了几种常用的WPF数据验证方法,并通过示例展示了如何使用内置验证控件(如`TextBox`)及自定义验证规则实现有效验证。内置控件结合`Validation`类可快速实现简单验证;自定义规则则提供了更灵活的复杂逻辑支持。希望本文能帮助开发者更好地进行WPF数据验证。
51 0
|
2月前
|
C# UED 定位技术
WPF控件大全:初学者必读,掌握控件使用技巧,让你的应用程序更上一层楼!
【8月更文挑战第31天】在WPF应用程序开发中,控件是实现用户界面交互的关键元素。WPF提供了丰富的控件库,包括基础控件(如`Button`、`TextBox`)、布局控件(如`StackPanel`、`Grid`)、数据绑定控件(如`ListBox`、`DataGrid`)等。本文将介绍这些控件的基本分类及使用技巧,并通过示例代码展示如何在项目中应用。合理选择控件并利用布局控件和数据绑定功能,可以提升用户体验和程序性能。
45 0
|
2月前
|
C# Windows
WPF中如何使用HandyCotrol控件库
WPF中如何使用HandyCotrol控件库
103 1
|
2月前
|
开发框架 前端开发 JavaScript
WPF应用开发之控件动态内容展示
WPF应用开发之控件动态内容展示