【WPF】如何使用wpf实现屏幕最前端的绘图?
引言
在知乎上面看到如何使用wpf实现屏幕最前端的绘图? 这么一个问题,觉得全屏弹幕很有趣,所以把它实现了.
实现
界面设置很简单,Window界面无边框+最大化+允许不规则+背景色透明+置顶,如下
<Window x:Class="FullScreen.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" WindowState="Maximized" Topmost="True" AllowsTransparency="True" Background="Transparent" WindowStyle="None" >
<Canvas Name="canvas"> </Canvas>
</Window>
弹幕信息出现的位置和速度都随机产生,还要保证永远最大化和置顶,如下
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.Loaded += MainWindow_Loaded;
this.Deactivated += MainWindow_Deactivated;
this.StateChanged += MainWindow_StateChanged;
}
/// <summary>
/// 确保永远最大化
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void MainWindow_StateChanged(object sender, EventArgs e)
{
this.WindowState = WindowState.Maximized;
}
/// <summary>
/// 确保永远置顶
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void MainWindow_Deactivated(object sender, EventArgs e)
{
this.Topmost = true;
}
void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
List<string> list = new List<string>();
list.Add("你们的");
list.Add("生活");
list.Add("真丰富");
list.Add("不像我");
list.Add("一个");
list.Add("帅");
list.Add("字");
list.Add("竟贯穿了");
list.Add("一生");
Barrage(list);
} /// <summary>
/// 在Window界面上显示弹幕信息,速度和位置随机产生
/// </summary>
/// <param name="contentlist"></param>
public void Barrage(IEnumerable<string> contentlist)
{
Random random = new Random();
foreach (var item in contentlist)
{ //获取位置随机数
double randomtop = random.NextDouble();
double inittop = canvas.ActualHeight * randomtop;
//获取速度随机数
double randomspeed = random.NextDouble();
double initspeed = * randomspeed;
//实例化TextBlock和设置基本属性,并添加到Canvas中
TextBlock textblock = new TextBlock();
textblock.Text = item;
textblock.FontSize = ;
Canvas.SetTop(textblock, inittop);
canvas.Children.Add(textblock);
//实例化动画
DoubleAnimation animation = new DoubleAnimation();
Timeline.SetDesiredFrameRate(animation,); //如果有性能问题,这里可以设置帧数
animation.From = ;
animation.To = canvas.ActualWidth;
animation.Duration = TimeSpan.FromSeconds(initspeed);
animation.AutoReverse = true;
animation.RepeatBehavior = RepeatBehavior.Forever;
animation.Completed += (object sender, EventArgs e) =>
{
canvas.Children.Remove(textblock);
};
//启动动画
textblock.BeginAnimation(Canvas.LeftProperty, animation);
} } }
效果图

小结
本文主要利用了WPF的动画和窗体的不规则化属性,这些WPF特性使实现起来的界面效果可以千变万化.
【WPF】如何使用wpf实现屏幕最前端的绘图?的更多相关文章
- [WPF]VS2019打包WPF程序
原文:[WPF]VS2019打包WPF程序 版权声明:本文为本人原创文章,未经博主允许不得转载. https://blog.csdn.net/m0_37316917/article/details/8 ...
- WPF 精修篇 WPF 使用ActiveX
原文:WPF 精修篇 WPF 使用ActiveX WPF 实现远程桌面功能 首先使用 开发人员命令提示 进入 自己的项目文件根目录下 输入 aximp C:\windows\System32\msts ...
- WPF 精修篇 WPF嵌入Winfrom控件
原文:WPF 精修篇 WPF嵌入Winfrom控件 先增加DLL 支持 使用 WindowsFormsHost 来加载Forms的控件 引用命名空间 xmlns:forms="clr-na ...
- WPF 获得鼠标相对于屏幕的位置,相对于控件的位置
相对于屏幕的位置 第一步: /// <summary> /// 用于获得鼠标相对于屏幕的位置 /// </summary> public class Win3 ...
- [WPF] 我的WPF自学日记2,自定义入口
在winform中入口文件就是Program.cs,而在WPF中看不到,因为它是自动生成的,可以说隐藏了,我们可以自定义一个入口文件,然后修改项目属性中的启动对象为我们自定义的入口文件. 首先新建入口 ...
- [WPF] 我的WPF自学日记1,无标题窗体拖动
学习WPF的第一天,尝试写比较常用的功能,无标题窗体拖动. 先在设计界面给它加上MouseDown事件 <Window x:Class="MyFirstWPFAPP.MainWindo ...
- 当前位置: 银光首页 > WPF > WPF学习教程 > WPF: ShowDialog() 切换到其他应用窗口后,再切换回来无法让子窗口总在最上方
转自http://www.silverlightchina.net/html/study/WPF/2012/0723/17608.html
- wpf 导出Excel Wpf Button 样式 wpf简单进度条 List泛型集合对象排序 C#集合
wpf 导出Excel 1 private void Button_Click_1(object sender, RoutedEventArgs e) 2 { 3 4 ExportDataGrid ...
- How do I duplicate a resource reference in code behind in WPF?如何在WPF后台代码中中复制引用的资源?
原文 https://stackoverflow.com/questions/28240528/how-do-i-duplicate-a-resource-reference-in-code-behi ...
随机推荐
- Sql server 索引详解
参考资料:老K写的,http://www.cnblogs.com/AK2012/archive/2013/01/04/2844283.html SQL索引在数据库优化中占有一个非常大的比例, 一个好的 ...
- JavaScript arguments对象
1.在JavaScript中,arguments对象是比较特别的一个对象,实际上是当前函数的一个内置属性.arguments非常类似Array,但实际上又不是一个Array实例.可以通过如下代码得以证 ...
- 分享今天在客户那里遇到的SQLSERVER连接超时以及我的解决办法
分享今天在客户那里遇到的SQLSERVER连接超时以及我的解决办法 客户的环境:SQLSERVER2005,WINDOWS2003 SP2 32位 这次发生连接超时的时间是2013-8-5 21: ...
- 【转】Java学习---解析Java Servlet工作过程
[原文]https://www.toutiao.com/i6594316694657696264/ 解析Java Servlet工作过程 Servlet简介 Servlet是sun公司提供的一门用于开 ...
- mariadb使用\s查看用户权限
今天出现一个问题就是:给zabbix用户赋予权限 语句如下: grant all on zabbix.* to 'zabbix'@'%' identified by 'zabbix' 按照这样的说法应 ...
- 3.1Python的判断选择语句
返回总目录 目录: 1.if单分支语句 2.if else 双分支语句 3.if elif ...else多分支语句 4.if 嵌套语句 判断语句总览: (一)if单分支语句: 语法: if 条件: ...
- Q矩阵输出
程序启动时: 1.Q矩阵在InitQX中对角阵赋初值为0.25,GPS卫星数6 2.Q矩阵初值在初始化时由GetBL获得,改变Q对角阵 Q初值第0个卫星 10000000000.000 X初值第0个卫 ...
- 极限编程核心价值:反馈(Feedback)
原文:https://deviq.com/feedback 极限编程核心价值:简单(Simplicity) 极限编程核心价值:沟通(Communication) 极限编程核心价值:反馈(Feedbac ...
- JFreeChart绘制XY折线图(工具类设计)
准备用Java写通信的仿真平台作为毕业设计,相比matlab绘图,Java绘图需要自己去写很多工具类,博主在这采用了JFreeChart的开源解决方案,摸索着自己写了一个XY折线图工具类,话不多说贴源 ...
- [Eclipse]在重命令文件名时,提示编码格式有问题导致修改失败,需要设置如下几个默认编码为UTF-8
需要设置的几处地方为: 1.Window->Preferences->General ->Content Type->Text->JSP 最下面设置为UTF-8 2. W ...