WPF开发的彩票程序(练手好例子)

WPF开发的彩票程序(练手好例子)

  • 商品编号:
    #63577546_635
    • 原价:
      免费
    • 会员价:
      免费
  • 分类:
    • V1.0.0
  • 数量:

购物车中已存在此商品,请在购物车中操作单击跳转购物车

  • 开发者:源之缘
  • 开发语言:C#
  • 开发环境:Visual Studio
  • 数据库:无
  • 商品架构:C/S
  • 编码格式:utf-8
  • 是否开源:是
  • 开源协议:BSD

前言

WPF是.NET最新的界面开发库,开发界面非常灵活!但是学习WPF难度也非常大。

应朋友之邀,编写了一个小程序。程序虽小,五脏俱全,WPF开发的灵活性可窥见一斑。

对于新手学习有很好的借鉴意义,代码已上传到CSDN可以下载。网址见文章底部。

功能说明

   分析彩票的历史记录,根据选取的几个数据,分析记录出现的情况。看下图。

左边是历史记录,右边 是选取的数据 68、 8*。从历史记录查找,符合这个逻辑关系的数据。

245753-20171130130515401-2007645955

技术解析

  我这里分析几个小技术点。

   1)ListView不同行颜色设定

    ListView 有一个属性 ItemContainerStyleSelector,这个属性可以绑定到一个类,你可以在这个类中,根据每行的属性,设定背景。

public class ListViewItemStyleSelector : StyleSelector
    {
        public override Style SelectStyle(object item,DependencyObject container)
        {
            Style st = new Style();
            st.TargetType = typeof(ListViewItem);
            Setter backGroundSetter = new Setter();
            backGroundSetter.Property = ListViewItem.BackgroundProperty;
            ListView listView =ItemsControl.ItemsControlFromItemContainer(container) as ListView;
            int index =listView.ItemContainerGenerator.IndexFromContainer(container);
            if (index % 2 == 0)
            {
                backGroundSetter.Value = Brushes.LightGray;
            }
            else
            {
                backGroundSetter.Value = Brushes.White;
            }
            st.Setters.Add(backGroundSetter);
            return st;
        }
    }

 2)数字的显示

   ListView 每一列,可以绑定字符串,也可以根据需要绑定控件模版。

<GridView >
    <GridViewColumn Header="序号" Width="50" DisplayMemberBinding="{Binding Path=StrNO}"></GridViewColumn>
    <GridViewColumn Header="日期" Width="120" DisplayMemberBinding="{Binding Path=StrTimeStamp}"></GridViewColumn>
    <GridViewColumn Header="期数" Width="110" DisplayMemberBinding="{Binding Path=StrVolume}"></GridViewColumn>
    <GridViewColumn Header="1列"  Width="55" CellTemplate="{StaticResource ColDigital1}"></GridViewColumn>
    <GridViewColumn Header="2列" Width="55" CellTemplate="{StaticResource ColDigital2}"></GridViewColumn>
    <GridViewColumn Header="3列" Width="55" CellTemplate="{StaticResource ColDigital3}"></GridViewColumn>
    <GridViewColumn Header="4列" Width="55" CellTemplate="{StaticResource ColDigital4}"></GridViewColumn>
    <GridViewColumn Header="5列" Width="55" CellTemplate="{StaticResource ColDigital5}"></GridViewColumn>
    <GridViewColumn Header="6列" Width="55" CellTemplate="{StaticResource ColDigital6}"></GridViewColumn>
    <GridViewColumn Header="7列" Width="55" CellTemplate="{StaticResource ColDigital7}"></GridViewColumn>
  </GridView>

   数字是静态绑定到 ColDigital1,ColDigital2...等,咱看看ColDigital1如何实现的。

<DataTemplate x:Key="ColDigital1" >
    <StackPanel Margin="5,2,5,2" HorizontalAlignment="Center" Width="180">
        <local:CustomControl_digital x:Name="labelDigital1" Width="30" Height="30" StrDigital="{Binding Path=StrCol1}"></local:CustomControl_digital>
    </StackPanel>
</DataTemplate>

StackPanel 包含了一个自定义控件CustomControl_digital,这个自定控件实现了对数字的绘制。ListView 绑定一个类,这个类有属性字段StrCol1;自定义控件就从StrCol1获取数据绘制。

public class CustomControl_digital : Control
    {
        static CustomControl_digital()
        {
            StrDigitalProperty =
      DependencyProperty.Register("StrDigital", //属性名称
      typeof(string), //属性类型
      typeof(CustomControl_digital), //该属性所有者,即将该属性注册到那个类上
      new PropertyMetadata("")); //属性默认值

            DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControl_digital), new FrameworkPropertyMetadata(typeof(CustomControl_digital)));
        }

        public static readonly DependencyProperty StrDigitalProperty;

        public static Color defaultColor = Color.FromRgb(41, 57, 85);
        Color BackColor { get; set; } = defaultColor;
        public void SetBackColor(int index)
        {
            if (index == 0)
                BackColor = defaultColor;
            else
                BackColor = Color.FromRgb(62, 175, 14);
        }

        public string StrDigital
        {
            get { return (string)GetValue(StrDigitalProperty); }
            set { SetValue(StrDigitalProperty, value); }
        }

        protected override void OnMouseDoubleClick(MouseButtonEventArgs e)
        {
            base.OnMouseDoubleClick(e);
        }
        protected override void OnRender(DrawingContext dc)
        {
            base.OnRender(dc);
            if (StrDigital == "--")
                return;

            double len = Math.Min(ActualHeight, ActualWidth);
            Point center = new Point(ActualWidth / 2, ActualHeight / 2);

            Pen pen = new Pen(Brushes.Black, 0);
            Brush brush = new SolidColorBrush(BackColor);

            double totalRadius = len / 2;
            double radius = totalRadius * 9 / 10;
            dc.DrawEllipse(brush, pen, center, radius, radius);

            if (!string.IsNullOrEmpty(StrDigital))
            {
                FormattedText text = new FormattedText(StrDigital, CultureInfo.CurrentCulture,
        FlowDirection.LeftToRight, new Typeface("Verdana"), 14, Brushes.White);
                Point txtPoint = new Point(center.X - 9, center.Y - 8);
                dc.DrawText(text, txtPoint);
            }

        }
    }


权利声明:本站所有商品信息、客户评价等信息是初心商城重要的数据资源,未经许可,禁止非法转载使用。 注:本站商品信息均来自初心商城,其真实性、准确性和合法性由初心商城负责。

                  初心源说明:初心商城主要为程序员提供开发基础的代码源以及成熟项目,网站中所有的商品有提供收费版本的, 也有提供免费版本的,按照大家各自不同的需求进行购买。实实在在的让程序员只用专注于自己的业务实现你的小梦想, 如果您对我们的成果表示认同并且觉得对你有所帮助我们愿意接受来自各方面的支持^_^。

                  支持:用手机扫描二维码支付

                  支付宝支持我们 微信支持我们

                  您的支持将被用于:
                  1、持续深入的上传更多更好的源代码
                  2、建立更加完善的技术社区
                  3、完善现在系统出现各种问题
                  4、购买域名和租赁服务器

                  1、交易规则

                  2、发货方式

                  1、自动:在上方保障服务中标有自动发货的商品,拍下后,将会自动收到来自卖家的商品获取(下载)链接

                  2、手动:在上方保障服务中标有手动发货的商品,拍下后,卖家会收到邮件,也可通过QQ或订单中的电话联系对方。

                  3、退款说明

                  1、描述:源码描述(含标题)与实际源码不一致的(例:描述PHP实际为ASP、描述的功能实际缺少、版本不符等)

                  2、演示:有演示站时,与实际源码小于95%一致的(但描述中有"不保证完全一样、有变化的可能性"类似显著声明的除外)

                  3、发货:手动发货源码,在卖家未发货前,已申请退款的

                  4、服务:卖家不提供安装服务或需额外收费的(但描述中有显著声明的除外)

                  5、其它:如质量方面的硬性常规问题等

                  备注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。交易中的商品,卖家无法对描述进行修改!

                  4、注意事项

                  1、客户买完之后未确认收货,将不会收到下载地址和下载码,确认收货之后才能收到下载地址和下载码。

                  2、在未拍下前,双方在QQ上所商定的内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准);

                  3、在商品同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外);

                  4、在没有"无任何正当退款依据"的前提下,写有"一旦售出,概不支持退款"等类似的声明,视为无效声明;

                  5、虽然交易产生纠纷的几率很小,但请尽量保留如聊天记录这样的重要信息,以防产生纠纷时出现问题不明确的情况。

                  5、交易声明

                  1、本站作为直卖平台,依据交易合同(商品描述、交易前商定的内容)来保障交易的安全及买卖双方的权益;

                  2、非平台线上交易的商品,出现任何后果均与本站无关;无论卖家以何理由要求线下交易的,请联系管理举报。

                  初心Logo

                  初心商城| 初心系列| 初心博客| 初心公告| 系统反馈

                  © 2016-2018 山西米立信息技术有限公司 保留所有权利 京ICP备16055626号
                  违法和不良信息举报电话:186-2950-9347,本网站所列数据,除特殊说明,所有数据均出自我工作室
                  本网站兼容所有主流浏览器,不支持手机自适应