日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

WPF实现聚光灯效果

發布時間:2023/12/4 asp.net 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WPF实现聚光灯效果 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

WPF開發者QQ群:?340500857? | 微信群 -> 進入公眾號主頁?加入組織

歡迎轉發、分享、點贊、在看,謝謝~。??

前言

????????效果仿照 CSS聚光燈效果?

https://www.jianshu.com/p/6eae322e8e38

01

效果預覽

更多效果請下載源碼體驗

一、SpotLight.cs 代碼如下

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Media; using System.Windows.Media.Animation;namespace WPFDevelopers.Controls {[TemplatePart(Name = TextBlockBottomTemplateName, Type = typeof(TextBlock))][TemplatePart(Name = TextBlockTopTemplateName, Type = typeof(TextBlock))][TemplatePart(Name = EllipseGeometryTemplateName, Type = typeof(EllipseGeometry))]public class SpotLight : Control{private const string TextBlockBottomTemplateName = "PART_TextBlockBottom";private const string TextBlockTopTemplateName = "PART_TextBlockTop";private const string EllipseGeometryTemplateName = "PART_EllipseGeometry";private TextBlock _textBlockBottom, _textBlockTop;private EllipseGeometry _ellipseGeometry;public string Text{get { return (string)GetValue(TextProperty); }set { SetValue(TextProperty, value); }}public static readonly DependencyProperty TextProperty =DependencyProperty.Register("Text", typeof(string), typeof(SpotLight), new PropertyMetadata("WPFDevelopers"));static SpotLight(){DefaultStyleKeyProperty.OverrideMetadata(typeof(SpotLight), new FrameworkPropertyMetadata(typeof(SpotLight)));}public SpotLight(){this.Loaded += SpotLight_Loaded;}private void SpotLight_Loaded(object sender, RoutedEventArgs e){Canvas.SetLeft(_textBlockBottom, ActualWidth / 3);Canvas.SetTop(_textBlockBottom, ActualHeight / 3);Canvas.SetLeft(_textBlockTop, ActualWidth / 3);Canvas.SetTop(_textBlockTop, ActualHeight / 3);}public override void OnApplyTemplate(){base.OnApplyTemplate();_textBlockBottom = GetTemplateChild(TextBlockBottomTemplateName) as TextBlock;_textBlockTop = GetTemplateChild(TextBlockTopTemplateName) as TextBlock;_ellipseGeometry = GetTemplateChild(EllipseGeometryTemplateName) as EllipseGeometry;var center = new Point(FontSize/2, FontSize/2); _ellipseGeometry.RadiusX = FontSize;_ellipseGeometry.RadiusY = FontSize;_ellipseGeometry.Center = center;if (_textBlockBottom != null && _textBlockTop != null && _ellipseGeometry != null)_textBlockTop.Loaded += _textBlockTop_Loaded;}private void _textBlockTop_Loaded(object sender, RoutedEventArgs e){var doubleAnimation = new DoubleAnimation{To = _textBlockTop.ActualWidth,Duration = TimeSpan.FromSeconds(3)};Storyboard.SetTarget(doubleAnimation, _textBlockTop);Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath("(UIElement.Clip).(EllipseGeometry.Transform).(TranslateTransform.X)"));var storyboard = new Storyboard{RepeatBehavior = RepeatBehavior.Forever,AutoReverse = true};storyboard.Children.Add(doubleAnimation);storyboard.Completed += (s, q) => {};storyboard.Begin();}} }

二、SpotLight.xaml?代碼如下

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:controls="clr-namespace:WPFDevelopers.Controls"><ResourceDictionary.MergedDictionaries><ResourceDictionary Source="Basic/ControlBasic.xaml"/></ResourceDictionary.MergedDictionaries><Style TargetType="{x:Type controls:SpotLight}" BasedOn="{StaticResource ControlBasicStyle}"><Setter Property="Background" Value="#222222"/><Setter Property="FontSize" Value="60"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type controls:SpotLight}"><Canvas x:Name="PART_Canvas" Background="{TemplateBinding Background}"><TextBlock x:Name="PART_TextBlockBottom" Text="{TemplateBinding Text}"FontSize="{TemplateBinding FontSize}" FontFamily="Arial Black"FontWeight="Bold" Foreground="#323232"/><TextBlock x:Name="PART_TextBlockTop" Text="{TemplateBinding Text}"FontSize="{TemplateBinding FontSize}" FontFamily="Arial Black"FontWeight="Bold"><TextBlock.Foreground><LinearGradientBrush EndPoint="1,1" MappingMode="RelativeToBoundingBox" StartPoint="0,0"><GradientStop Color="#FF9C1031" Offset="0.1"/><GradientStop Color="#FFBE0E20" Offset="0.2"/><GradientStop Color="#FF9C12AC" Offset="0.7"/><GradientStop Color="#FF0A8DC3" Offset="0.8"/><GradientStop Color="#FF1AEBCC" Offset="1"/></LinearGradientBrush></TextBlock.Foreground><TextBlock.Clip><EllipseGeometry x:Name="PART_EllipseGeometry"><EllipseGeometry.Transform><TranslateTransform/></EllipseGeometry.Transform></EllipseGeometry></TextBlock.Clip></TextBlock></Canvas></ControlTemplate></Setter.Value></Setter> </Style></ResourceDictionary>

三、SpotLightExample.Xaml 代碼如下

<UserControl x:Class="WPFDevelopers.Samples.ExampleViews.SpotLightExample"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:WPFDevelopers.Samples.ExampleViews"xmlns:wpfdev="https://github.com/yanjinhuagood/WPFDevelopers"mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800"><UniformGrid Rows="2"><wpfdev:SpotLight FontSize="50" Text="YanJinHua"/><wpfdev:SpotLight/></UniformGrid> </UserControl>

源碼地址

github:https://github.com/yanjinhuagood/WPFDevelopers.git

gitee:https://gitee.com/yanjinhua/WPFDevelopers.git

WPF開發者QQ群:?340500857?

blogs:?https://www.cnblogs.com/yanjinhua

Github:https://github.com/yanjinhuagood

出處:https://www.cnblogs.com/yanjinhua

版權:本作品采用「署名-非商業性使用-相同方式共享 4.0 國際」許可協議進行許可。

轉載請著名作者 出處 https://github.com/yanjinhuagood

總結

以上是生活随笔為你收集整理的WPF实现聚光灯效果的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。