zoukankan      html  css  js  c++  java
  • wpfRPG游戏卷一用户控件之字体

    一.目的

    构建如图有描边的文字。

    二.正文

    1.QXObject继承属性I:

    现实控件的基本布局,从自定义接口QXObject继承实现

    属性共9个,其中:

    X,Y:用户控件左上角坐标(相当于地图);

    CenterX,CenterY:用户控件定位点,此处无用,若继承的为精灵则可定位到精灵脚下坐标;

    Left,Top,ZIndex:用户控件在父容器,此处为Canvas的X,Y,Z轴距离,实现为:

    /// <summary>

            /// 获取或设置层次

            /// </summary>

            public int ZIndex {

                get { return (int)this.GetValue(Canvas.ZIndexProperty); }

                set { this.SetValue(Canvas.ZIndexProperty, value); }

            }

    Width_,Height:用户控件宽高。

    2.基础属性

    上述8个属性为文字控件基础属性,从命名就可知道用处了,具体声明如下:

    /// <summary>

            /// 获取或设置文字是否加粗

            /// </summary>

            public bool Bold {

                get { return (bool)GetValue(BoldProperty); }

                set { SetValue(BoldProperty, value); }

            }

     

            public static readonly DependencyProperty BoldProperty = DependencyProperty.Register(

                "Bold",//注册名

                typeof(bool),//属性类型

                typeof(QXText),//所有者类型

                new FrameworkPropertyMetadata(

                    false,//默认值

                    FrameworkPropertyMetadataOptions.AffectsRender,//呈现时更改

                    new PropertyChangedCallback(QXTextInvalidated),//回调函数

                    null

                    )

                );

    3.绘制及重绘方法

    上面我们声明了这么多的属性,下面开始写字喽!

    写字三步走:

    1. 声明个文字路径

    Geometry TextGeometry;

    2.重载呈现函数

    /// <summary>

            /// 重载控件OnRender

            /// </summary>

            protected override void OnRender(DrawingContext drawingContext) {

                CreateText();

                drawingContext.DrawGeometry(Fill, new Pen(Stroke, StrokeThickness), TextGeometry);

            }

    CreateText方法:

    /// <summary>

            /// 生成描边文字

            /// </summary>

            public void CreateText() {

                FormattedText formattedText = new FormattedText(

                    Text,

                    CultureInfo.GetCultureInfo("zh-cn"),

                    FlowDirection.LeftToRight,

                    new Typeface(Font, Italic ? FontStyles.Italic : FontStyles.Normal, Bold ? FontWeights.Bold : FontWeights.Normal, FontStretches.Normal),

                    Size,

                    Brushes.Black

                    );

                //根据文字创建路径

                TextGeometry = formattedText.BuildGeometry(new Point(0, 0));

                this.MinWidth = formattedText.Width; this.MinHeight = formattedText.Height;

            }

    3.回调函数

    /// <summary>

            /// 回调重绘

            /// </summary>

            /// <param name="d"></param>

            /// <param name="e"></param>

            private static void QXTextInvalidated(DependencyObject d, DependencyPropertyChangedEventArgs e) {

                ((QXText)d).CreateText();

            }

    三.总结

    至此用户文字控件完成!

    很高兴,很早上看代码学习,晚上总结,大家都知道这是个好习惯,希望自己能坚持下来。

  • 相关阅读:
    什么是程序员的优秀品质?【转】
    我也来评“超级女声”五强选手
    ddd
    在window 2003 server下遇到的asp错误
    几个asp+操作日期的函数
    vb.net常用函数
    WordPress使用小记
    asp.net身份验证方式
    水晶报表如何导出为Excel文档
    ListView选中selectedItem上下移动
  • 原文地址:https://www.cnblogs.com/haichao/p/2615804.html
Copyright © 2011-2022 走看看