文档章节

WPF文字阴影的简单编辑

小妖同学
 小妖同学
发布于 2014/01/02 10:59
字数 986
阅读 479
收藏 1
点赞 0
评论 0
这个控件 继承的是一个 UserControl 类 ,在控件的 XAML 编辑 内放置了一个 Canvas的面板 面板里面 放置了 两个
TextBlock的控件,通过控制 两个 TextBlock 控件的偏移位置,使原先平面上的文字看起来有个阴影立体的效果


XAML编辑框中的代码
<Canvas>
    <TextBlock x:Name="under" />
    <TextBlock x:Name="above" />            
</Canvas>
后台的代码:
#region 属性
#region SetOpacityForBottomProperty 获取或设置下层文字不透明度
private static readonly DependencyProperty SetOpacityForBottomProperty =
    DependencyProperty.Register("SetOpacityForBottom", 
                                typeof(double), 
                                typeof(TextShadow),
                                new PropertyMetadata((double)1.0, 
                                                        new PropertyChangedCallback(SetOpacityForBottomPropertyChanged)));

private static void SetOpacityForBottomPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    TextShadow local = d as TextShadow;
    if (local != null)
    {
        local.TextOpacity();
    }
}
/// <summary>
/// 获取或设置下层文字不透明度
/// </summary>
public double SetOpacityForBottom
{
    get { return (double)GetValue(SetOpacityForBottomProperty); }
    set { SetValue(SetOpacityForBottomProperty, value); }
}
#endregion
#region SetOpacityForTopProperty 获取或设置上层文字不透明度
private static readonly DependencyProperty SetOpacityForTopProperty = 
    DependencyProperty.Register("SetOpacityForTop", 
                                typeof(double), 
                                typeof(TextShadow),
                                new PropertyMetadata((double)1.0, 
                                                        new PropertyChangedCallback(SetOpacityForTopPropertyChanged)));

private static void SetOpacityForTopPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    TextShadow local = d as TextShadow;
    if (local != null)
    {
        local.TextOpacity();
    }
}
/// <summary>
/// 获取或设置上层文字的不透明度
/// </summary>
public double SetOpacityForTop
{
    get { return (double)GetValue(SetOpacityForTopProperty); }
    set { SetValue(SetOpacityForTopProperty, value); }
}
#endregion
#region SetColorForBottomProperty 获取或设置下层文字颜色
private static readonly DependencyProperty SetColorForBottomProperty = 
    DependencyProperty.Register("SetColorForBottom", 
                                typeof(Brush), 
                                typeof(TextShadow),
                                new PropertyMetadata(Brushes.Black, 
                                                    new PropertyChangedCallback(SetColorForBottomPropertyChanged)));

private static void SetColorForBottomPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    TextShadow local = d as TextShadow;
    if (local != null)
    {
        local.TextColor();
    }
}
/// <summary>
/// 获取或设置下层文字颜色
/// </summary>
public Brush SetColorForBottom
{
    get { return (Brush)GetValue(SetColorForBottomProperty); }
    set { SetValue(SetColorForBottomProperty, value); }
}
#endregion
#region SetColorForTopProperty 获取或设置上层文字颜色
private static readonly DependencyProperty SetColorForTopProperty = 
    DependencyProperty.Register("SetColorForTop", 
                                typeof(Brush), 
                                typeof(TextShadow),
                                new PropertyMetadata(Brushes.White, 
                                                    new PropertyChangedCallback(SetColorForTopPropertyChanged)));

private static void SetColorForTopPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    TextShadow local = d as TextShadow;
    if (local != null)
    {
        local.TextColor();
    }
}
/// <summary>
/// 获取或设置上层文字颜色
/// </summary>
public Brush SetColorForTop
{
    get { return (Brush)GetValue(SetColorForTopProperty); }
    set { SetValue(SetColorForTopProperty, value); }
}
#endregion
#region SetTextProperty 获取或设置文字
private static readonly DependencyProperty SetTextProperty =
    DependencyProperty.Register("SetText", 
                                typeof(string), 
                                typeof(TextShadow), 
                                new PropertyMetadata((string)null, 
                                                    new PropertyChangedCallback(SetTextPropertyChanged)));

private static void SetTextPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    TextShadow local = d as TextShadow;
    var text = (string)e.NewValue;
    local.above.Text = text;
    local.under.Text = text;
}
/// <summary>
/// 获取或设置文字
/// </summary>
public string SetText
{
    get { return (string)GetValue(SetTextProperty); }
    set { SetValue(SetTextProperty, value); }
}
#endregion
#region SetLeftForTopProperty 获取或设置上层文字距左偏移量
private static readonly DependencyProperty SetLeftForTopProperty = 
    DependencyProperty.Register("SetLeftForTop", 
                                typeof(double), 
                                typeof(TextShadow), 
                                new PropertyMetadata((double)0.0, 
                                                new PropertyChangedCallback(SetLeftForTopPropertyChanged)));

private static void SetLeftForTopPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    TextShadow local = d as TextShadow;
    if (local != null)
    {
        local.TextOffset();
    }
}
/// <summary>
/// 获取或设置上层文字距左偏移量
/// </summary>
public double SetLeftForTop
{
    get{return (double) GetValue(SetLeftForTopProperty);}
    set{SetValue(SetLeftForTopProperty,value);}
}        
#endregion
#region SetTopForTopProperty 获取或设置上层文字距上偏移量
private static readonly DependencyProperty SetTopForTopProperty = 
    DependencyProperty.Register("SetTopForTop", 
                            typeof(double), 
                            typeof(TextShadow), 
                            new PropertyMetadata((double)0.0, 
                                                new PropertyChangedCallback(SetTopForTopPropertyChanged)));

private static void SetTopForTopPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    TextShadow local = d as TextShadow;
    if (local != null)
    {
        local.TextOffset();
    }
}
/// <summary>
/// 获取或设置上层文字距上偏移量
/// </summary>
public double SetTopForTop
{
    get { return (double)GetValue(SetTopForTopProperty); }
    set { SetValue(SetTopForTopProperty, value); }
}
#endregion
#region SetLeftForBottomProperty 获取或设置下层文字距左偏移量
private static readonly DependencyProperty SetLeftForBottomProperty = 
    DependencyProperty.Register("SetLeftForBottom", 
                            typeof(double), 
                            typeof(TextShadow), 
                            new PropertyMetadata((double)0.0, 
                                                new PropertyChangedCallback(SetLeftForBottomPropertyChanged)));

private static void SetLeftForBottomPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    TextShadow local = d as TextShadow;
    if (local != null)
    {
        local.TextOffset();
    }
}
/// <summary>
/// 获取或设置下层文字距左偏移量
/// </summary>
public double SetLeftForBottom
{
    get { return (double)GetValue(SetLeftForBottomProperty); }
    set { SetValue(SetLeftForBottomProperty, value); }
}
#endregion
#region SetTopForBottomProperty 获取或设置下层文字距上偏移量
private static readonly DependencyProperty SetTopForBottomProperty =
    DependencyProperty.Register("SetTopForBottom", 
                                typeof(double), 
                                typeof(TextShadow), 
                                new PropertyMetadata((double)0.0, 
                                                new PropertyChangedCallback(SetTopForBottomPropertyChanged)));

private static void SetTopForBottomPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    TextShadow local = d as TextShadow;
    if (local != null)
    {
        local.TextOffset();
    }
}
/// <summary>
/// 获取或设置下层文字距上偏移量
/// </summary>
public double SetTopForBottom
{
    get { return (double)GetValue(SetTopForBottomProperty); }
    set {SetValue(SetTopForBottomProperty,value);}
}
#endregion
#endregion
#region 方法
public void TextOffset()
{
    SetTextOffset(above, under, SetLeftForTop, SetTopForTop, SetLeftForBottom, SetTopForBottom);
}
public void TextColor()
{
    SetTextColor(above, under, SetColorForTop, SetColorForBottom);
}
public void TextOpacity()
{
    SetTextOpacity(above, under, SetOpacityForTop,SetOpacityForBottom);
}
/// <summary>
/// 获取或设置文字偏移量
/// </summary>
private static void SetTextOffset(TextBlock above,TextBlock under, double aboveLeft,double aboveTop,double underLeft,double underTop)
{
    if (above != null)
    {
        Canvas.SetLeft(above,aboveLeft);
        Canvas.SetTop(above, aboveTop);
    }
    if (under != null)
    {
        Canvas.SetLeft(under, underLeft);
        Canvas.SetTop(under, underTop);
    }
}
/// <summary>
/// 获取或设置文字的颜色
/// </summary>
private static void SetTextColor(TextBlock above, TextBlock under, Brush aboveColor, Brush underColor)
{
    if (above != null)
    {
        above.Foreground = aboveColor;
    }
    if (under != null)
    {
        under.Foreground = underColor;
    }
}
/// <summary>
/// 获取或设置文字的不透明度
/// </summary>
private static void SetTextOpacity(TextBlock above, TextBlock under, double aboveOpacity, double underOpacity)
{
    if (above != null)
    {
        above.Opacity = aboveOpacity;
    }
    if (under != null)
    {
        under.Opacity = underOpacity;
    }
}
#endregion

      

© 著作权归作者所有

共有 人打赏支持
小妖同学
粉丝 4
博文 2
码字总数 1531
作品 0
无锡
怎么用几何画板制作文氏图

说到文氏图对于专业领域的人来说都不陌生,其英文名是Venn Diagram,也有译:韦恩图、文恩图或韦氏图等,这是一种用封闭曲线(内部区域)表示集合及其关系的图形,在表现一些逻辑关系(如三段...

学术研究软件 ⋅ 2016/06/22 ⋅ 0

针对WPF开发的报表工具控件Stimulsoft Reports.Wpf​

Stimulsoft Reports.Wpf是针对WPF开发的报表工具控件。无需上网,所有的WPF功能都能用上!丰富的界面更换功能、查看功能、打印以及导出报表功能——所有的这一切就是它都能轻松实现。 创建 ...

javascript1 ⋅ 2014/06/19 ⋅ 0

怎么用几何画板制作立体阴影效果文字

做为很多的数学老师都喜爱的一款教学辅助软件,几何画板的作图和演示功能是非常强大的,不论是静态图还是动态图都可以制作。但是它对文字的处理上就不是那么强了,有些老师希望可以给文字加上...

学术研究软件 ⋅ 2016/06/24 ⋅ 0

玩转Android 之 TextView常用特效

暑期大学生博客分享大赛 - 2011 Android 成长篇 本文参加第二届Google大学生暑期博客分享大赛 TextView是最常用的Android控件之一,显示文字时的首选,然而很多人都不满足于,TextView默认的...

cokey ⋅ 2011/08/06 ⋅ 3

支持循环事件的日历日程控件MindFusion.Scheduling for WPF

MindFusion.Scheduling for WPF 是一款WPF平台下灵巧的日历日程控件,可以进行日程安排,计划调度,工作安排等,支持多种视图,多种外观样式,可以很轻松地整合到应用程序中,为项目开发节约...

javascriptc ⋅ 2014/06/24 ⋅ 0

使用WPF来创建 Metro UI

当我第一次运行Zune时,我为这些美丽的UI所折服。当时就说这肯定不是用WPF做的,因为这些字体是如此的清晰而且UI反映的也非常快速。。而且我从维基百科上也了解到Zune的第一个版本是2006年发...

junwong ⋅ 2012/06/10 ⋅ 14

KindEditor 3.5.5 发布

KindEditor是在国内比较受欢迎的HTML在线编辑器,本次更新新增单元格编辑功能,各种按钮(确定、取消、上传等按钮)在不同浏览器上保持相同外观。 主要变化 新增单元格编辑功能。(右键点击单...

红薯 ⋅ 2011/05/22 ⋅ 3

分享10个实用的超绚CSS3按钮设计

日期:2012-4-10 来源:GBin1.com CSS3在web开发技术中绝对是超棒的!随着梯度,阴影,文字阴影和边界半径属性的添加,我们现在还可以使用简单的HTML标记和CSS3代码来创建非 常漂亮的按钮。我...

gbin1 ⋅ 2012/04/12 ⋅ 0

CSS3的八大功能

1)圆角 2)多背景 3)@font-face Firefox的最新版本将支持该功能,Safari,Opera甚至IE也将支持或已经支持该功能,我们会看到该功能的广泛应用,只是字体的版权问题会很麻烦。 4)动画与渐变 We...

一颗星星变了心 ⋅ 2014/09/12 ⋅ 0

6 个典型的 HTML5 文字特效示例

在HTML5出现之前,网页上的文字比较单一,除了设置大小、颜色、粗细之外,没有任何出色的特效,当然优秀的文字排版也能让页面显得舒服温馨,但 是当我们需要让页面变得震撼惊奇的话,那么HTM...

tp_wire ⋅ 2012/08/30 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java Web如何操作Cookie的添加修改和删除

创建Cookie对象 Cookie cookie = new Cookie("id", "1"); 修改Cookie值 cookie.setValue("2"); 设置Cookie有效期和删除Cookie cookie.setMaxAge(24*60*60); // Cookie有效时间 co......

二营长意大利炮 ⋅ 今天 ⋅ 0

【每天一个JQuery特效】淡入淡出显示或隐藏窗口

我是JQuery新手爱好者,有时间就练练代码,防止手生,争取每天一个JQuery练习,在这个博客记录下学习的笔记。 本特效主要采用fadeIn()和fadeOut()方法显示淡入淡出的显示效果显示或隐藏元...

Rhymo-Wu ⋅ 今天 ⋅ 0

Spring JDBC使用方法

普通实现: 1、创建数据表customer。 可以使用任何数据库实现,在项目中要引入相应数据库驱动包并配置相应数据库连接。 2、创建Customer pojo。 Customer类的属性对应数据库的属性,除了为每...

霍淇滨 ⋅ 今天 ⋅ 0

Contos 7 安装Jenkins

Jenkins是一款能提高效率的软件,它能帮你把软件开发过程形成工作流,典型的工作流包括以下几个步骤 开发 提交 编译 测试 发布 有了Jenkins的帮助,在这5步中,除了第1步,后续的4步都是自动...

欧虞山 ⋅ 今天 ⋅ 0

revel

revel install go get github.com/revel/revelgo get github.com/revel/cmd create new app revel new git.oschina.net/zdglf/myapp run app revel run git.oschina.net/zdglf/myapp ot......

zdglf ⋅ 今天 ⋅ 0

49. Group Anagrams - LeetCode

Question 49. Group Anagrams Solution 思路:维护一个map,key是输入数组中的字符串(根据字符排好序) Java实现: public List<List<String>> groupAnagrams(String[] strs) { Map<Strin......

yysue ⋅ 今天 ⋅ 0

spring Email

使用spring发Email其实就是使用spring自己封装携带的一个javamail.JavaMailSenderImpl类而已。这个类可以当一个普通的java对象来使用,也可以通过把它配置变成spring Bean的方式然后注入使用...

BobwithB ⋅ 今天 ⋅ 0

spark 整理的一些知识

Spark 知识点 请描述spark RDD原理与特征? RDD全称是resilient distributed dataset(具有弹性的分布式数据集)。一个RDD仅仅是一个分布式的元素集合。在Spark中,所有工作都表示为创建新的...

tuoleisi77 ⋅ 今天 ⋅ 0

思考

时间一天天过感觉自己有在成长吗?最怕的是时光匆匆而过,自己没有收获!下面总结下最近自己的思考。 认识自己 认识另一个自己,人们常说要虚心听取别人意见和建议。然而人往往是很难做到的,...

hello_hp ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部