我想让Form加载一个具有透明背景和非矩形形状的闪屏,并且具有点击功能。这可能吗 ?它是如何制作的?
我想知道是否有办法让Form1在同一个vs项目中调用一个WPF窗口(作为一种启动画面)。
我试图在VS中的项目浏览器中右键单击该项目 - >添加然后我正在搜索WPF窗口。但我唯一能添加的是“wpf User Controll”。
到目前为止一切顺利,但是如果我启动应用程序那么,它会给我一个错误,说我应该引用System.Windows.markup.IQueryAmbient,但我无法在列表中找到它(.NET)
我在做错了什么?将WPF窗口实现到Forms应用程序项目的方法是什么?感谢所有建议。
修改
这是Adobe Flash Professional CS6的闪屏,它几乎可以解释我想拥有的内容。非矩形图像,其中包含半透明和全透明的部分 http://webalazar.com/wp-content/uploads/2012/09/Adobe-Flash-Professional-CS6.png
答案 0 :(得分:2)
有三种方法可以做到这一点:
1。)完全转到WPF然后在你的WPF应用程序中引用WinForms .NET库,如果你想要WinForms特定的东西
2.。)创建一个新的WPF库(可以在代码中引用的.NET dll),它具有您想要的所有WPF功能(如启动画面),然后创建一个新的WinForms .NET应用程序和引用WinForms项目中的WPF项目,然后从WinForms应用程序调用WPF库
3。)根据你想要完成的事情(比如特殊的图形窗口或其他'花哨的'UI东西),以及你愿意花多少时间/精力,你可以学习DirectX,或者使用'gdi32.dll'并导入它的GDI +功能。
编辑:
所以这是在WindowForm C#app中获取WPF启动画面的一步一步:
1。)创建一个新的C#Windows窗体应用程序,随意调用它并将其保存在任何你想要的地方
2。)文件 - >添加 - >新项目
3.。)添加一个新的C#WPF用户控件库,称之为SplashScreen并确保注意它会尝试将其保存在同一个文件位置,所以如果你想保存它,那么一定要选择一个不同的位置。
4.删除在SplashScreen WPF库中创建的默认“UserControl1.xaml”
5.。)右键单击WPF项目和“Add-> Window”,然后将其命名为SplashScreen.xaml
6。)用以下内容替换SplashScreen.xaml中的所有现有代码:
<Window x:Class="SplashScreen.SplashScreen"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
WindowStyle="None" Background="Transparent" AllowsTransparency="True"
ShowInTaskbar="False" SizeToContent="WidthAndHeight"
Title="SplashScreen" WindowStartupLocation="CenterScreen">
<Image Source="logo.png" Stretch="None" />
</Window>
7.。)右键单击WPF项目和“添加 - >现有项目”,确保您的文件过滤器设置为“所有文件”并选择“logo.png”。
8。)查看新导入的'logo.png'的属性,并确保其'Build Action'设置为'Resource'
9.在Windows窗体项目中右键单击“添加 - >新建参考”,选择“项目”选项卡,然后选择刚刚创建的“SplashScreen”WPF项目。
10。)在Windows窗体项目中右键单击“添加 - >新建参考”,选择“.NET”选项卡,然后选择“PresentationFramework”,“PresentationCore”,“WindowsBase”和“System.Xaml”库
11。)在Windows窗体项目的“Program.cs”文件中,您现在可以执行此操作:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace MyGame
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
// Create a new 'splash screen instance
SplashScreen.SplashScreen ss = new SplashScreen.SplashScreen();
// Show it
ss.Visibility = System.Windows.Visibility.Visible;
// Forces the splash screen visible
Application.DoEvents();
// Here's where you'd your actual loading stuff, but this
// thread sleep is here to simulate 'loading'
System.Threading.Thread.Sleep(5000);
// Hide your splash screen
ss.Visibility = System.Windows.Visibility.Hidden;
// Start your main form, or whatever
Application.Run(new Form1());
}
}
}
答案 1 :(得分:0)
FormBorderStyle
设置为无TransparencyKey
设置为#00FF00 BackgroundImage
设置为png图像,其中不需要的区域颜色设置为#00FF00 当您将图片作为表单的背景图片加载时,它会将其每个像素与透明度键进行比较,如果匹配,则会将该像素渲染为透明。