文档章节

WPF文字阴影的简单编辑

小妖同学
 小妖同学
发布于 2014/01/02 10:59
字数 986
阅读 481
收藏 1
这个控件 继承的是一个 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
12
0
怎么用几何画板制作立体阴影效果文字

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

学术研究软件
2016/06/24
13
0
针对WPF开发的报表工具控件Stimulsoft Reports.Wpf​

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

javascript1
2014/06/19
0
0
玩转Android 之 TextView常用特效

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

cokey
2011/08/06
0
3
使用WPF来创建 Metro UI

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

junwong
2012/06/10
15.4K
14

没有更多内容

加载失败,请刷新页面

加载更多

下一页

49.Nginx防盗链 访问控制 解析php相关 代理服务器

12.13 Nginx防盗链 12.14 Nginx访问控制 12.15 Nginx解析php相关配置(502的问题) 12.16 Nginx代理 扩展 502问题汇总 http://ask.apelearn.com/question/9109 location优先级 http://blog....

王鑫linux
今天
1
0
Nginx防盗链、访问控制、解析php相关配置、Nginx代理

一、Nginx防盗链 1. 编辑虚拟主机配置文件 vim /usr/local/nginx/conf/vhost/test.com.conf 2. 在配置文件中添加如下的内容 { expires 7d; valid_referers none blocked server_names *.tes......

芬野de博客
今天
0
0
spring EL 和资源调用

资源调用 import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.PropertySource;import org.springframework.core.io.Resource;......

Canaan_
今天
1
0
memcached命令行、memcached数据导出和导入

一、memcached命令行 yum装telnet yum install telent 进入memcached telnet 127.0.0.1 11211 命令最后的2表示,两位字节,30表示过期时间(秒) 查看key1 get key1 删除:ctrl+删除键 二、m...

Zhouliang6
今天
1
0
Linux定时备份MySQL数据库

做项目有时候要备份数据库,手动备份太麻烦,所以找了一下定时备份数据库的方法 Linux里有一个 crontab 命令被用来提交和管理用户的需要周期性执行的任务,就像Windows里的定时任务一样,用这...

月夜中徘徊
今天
1
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部