文档章节

WPF文字阴影的简单编辑

小妖同学
 小妖同学
发布于 2014/01/02 10:59
字数 986
阅读 491
收藏 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
无锡
私信 提问
使用WPF来创建 Metro UI

亲们用过 Zune 嘛? 应该吧,可是 4.7.1404.0 版本才是我的第一次Zune体验,因为这个版本有非常显著的变化: 支持Windows Phone 7 并 整合了 Windows Live Essentials 2011. 当我第一次运行它...

王振威
2012/11/27
5.6K
4
怎么用几何画板制作文氏图

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

学术研究软件
2016/06/22
12
0
怎么用几何画板制作立体阴影效果文字

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

学术研究软件
2016/06/24
13
0
纯前端 Canvas 实现 HTML 转图片,自动生成微信阅读卡片

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

brickyang
08/28
0
0
支持循环事件的日历日程控件MindFusion.Scheduling for WPF

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

javascriptc
2014/06/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

09.ajax局部渲染---《Beetl视频课程》

本期视频实现分类实时获取; 内容简介:使用了局部渲染技术,实现分类的实时获取 一起学beetl目录:https://my.oschina.net/u/1590490?tab=newest&catalogId=6214598 作者:GK Beetl满足了更...

Gavin-King
9分钟前
1
0
同步访问共享的可变数据(66)

关键字synchronized 保证同一时刻,只有一个线程执行某一个方法或代码块 当一个对象被一个线程修改时,可以阻止其他线程看到其内部的不一致状态 正确的使用同步可以避免任何对象看到其不一致...

Java搬砖工程师
11分钟前
1
0
银行卡二要素真实性查询

验证用户的银行卡号、持卡人姓名是否真实。 示例代码: private static String host = "https://bank.market.alicloudapi.com";private static String path = "/bank2";private sta...

貔貅叔
15分钟前
1
0
iOS补位动画、沙漏效果、移动UITableViewCell、模拟贪吃蛇、拖拽进度等源码

iOS精选源码 JHAlertView - 一款黑白配色的HUD之沙漏效果 继承UIButton的自定义按钮SPButton 用递归算法实现iOS补位动画 iOS 长按移动UITableViewCell JHLikeButton - 有趣的点赞动画 兼容X...

Android爱开源
26分钟前
1
0
上币至iamToken

https://github.com/consenlabs/token-profile 点击Fork按钮,插入到自己的github项目中 cd /Users/shijun/Desktop/blockChain/iamToken git clone https://github.com/yellmi1983/token-pro......

八戒八戒八戒
29分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部