WPF文字阴影的简单编辑
WPF文字阴影的简单编辑
小妖同学 发表于4年前
WPF文字阴影的简单编辑
  • 发表于 4年前
  • 阅读 476
  • 收藏 1
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: 刚刚接触WPF两个多月,做了一个简单的文字阴影编辑的小控件,和大家分享一下
这个控件 继承的是一个 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

      

标签: WPF 3D文字阴影
共有 人打赏支持
粉丝 5
博文 2
码字总数 1531
×
小妖同学
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: