文档章节

WPF文字阴影的简单编辑

小妖同学
 小妖同学
发布于 2014/01/02 10:59
字数 986
阅读 489
收藏 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
纯前端 Canvas 实现 HTML 转图片,自动生成微信阅读卡片

最近公司微信公众号想使用 Apple 式的圆角阴影卡片做文章推荐。这种效果用 Adobe XD 可以轻松做出来,但是没法要求所有编辑都去学习新软件,所以就打算用前端实现一个小工具。效果如下: 功能...

brickyang
08/28
0
0
玩转Android 之 TextView常用特效

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

cokey
2011/08/06
0
3
针对WPF开发的报表工具控件Stimulsoft Reports.Wpf​

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

javascript1
2014/06/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS7防火墙firewalld操作

firewalld Linux上新用的防火墙软件,跟iptables差不多的工具。 firewall-cmd 是 firewalld 的字符界面管理工具,firewalld是CentOS7的一大特性,最大的好处有两个:支持动态更新,不用重启服...

dingdayu
今天
1
0
关于组件化的最初步

一个工程可能会有多个版本,有国际版、国内版、还有针对各种不同的渠道化的打包版本、这个属于我们日常经常见到的打包差异化版本需求。 而对于工程的开发,比如以前的公司,分成了有三大块业...

DannyCoder
今天
2
0
Spring的Resttemplate发送带header的post请求

private HttpHeaders getJsonHeader() { HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8"); ......

qiang123
昨天
3
0
Spring Cloud Gateway 之 Only one connection receive subscriber allowed

都说Spring Cloud Gateway好,我也来试试,可是配置了总是报下面这个错误: java.lang.IllegalStateException: Only one connection receive subscriber allowed. 困扰了我几天的问题,原来...

ThinkGem
昨天
27
0
学习设计模式——观察者模式

1. 认识观察者模式 1. 定义:定义对象之间一种一对多的依赖关系,当一个对象状态发生变化时,依赖该对象的其他对象都会得到通知并进行相应的变化。 2. 组织结构: Subject:目标对象类,会被...

江左煤郎
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部