1

我想让表单加载具有透明背景和非矩形形状的初始屏幕,并且可以点击。这可能吗 ?这个怎么做的 ?

我想知道是否有办法让 Form1 在同一个 vs 项目中调用 WPF 窗口(作为一种启动画面)。

我尝试在 VS 的项目资源管理器中右键单击该项目-> 添加,然后我正在搜索 WPF 窗口。但我唯一能添加的是“wpf User Controll”。

到目前为止一切都很好,但是如果我启动应用程序,它会给我一个错误,说我应该添加对 System.Windows.markup.IQueryAmbient 的引用,但我无法在列表中找到它(.NET)

我究竟做错了什么 ?将 WPF 窗口实现到 Forms 应用程序项目中的正确方法是什么?

感谢所有建议。

编辑:

这是 Adob​​e Flash Professional CS6 的启动画面,它几乎准确地解释了我想要什么。包含半透明和全透明部分的非矩形图像 http://webalazar.com/wp-content/uploads/2012/09/Adobe-Flash-Professional-CS6.png

4

2 回答 2

3

有 3 种方法可以做到这一点:

1.) 完全使用 WPF,然后在您的 WPF 应用程序中引用 WinForms .NET 库,如果您想要 WinForms 特定的东西

2.) 创建一个新的 WPF 库(一个可以在您的代码中引用的 .NET dll),其中包含您想要的所有 WPF 功能(如您的初始屏幕),然后创建一个新的 WinForms .NET 应用程序并引用 WPF WinForms 项目中的项目,然后从 WinForms 应用程序调用 WPF 库

3.) 根据您要完成的任务(例如特殊的图形窗口或其他“花哨”的 UI 内容),以及您愿意投入多少时间/精力,您可以学习 DirectX,或使用 'gdi32. dll' 并导入它的 GDI+ 功能。

编辑:

因此,这是在 WindowForm C# 应用程序中获取 WPF 启动画面的一步一步:

1.) 创建一个新的 C# Windows 窗体应用程序,随意调用它并将其保存在您想要的任何位置

2.) 文件->添加->新建项目

3.) 添加一个新的 C# WPF 用户控件库,将其命名为 SplashScreen 并确保注意它会尝试将其保存在相同的文件位置,因此如果要将其保存在其他位置,请务必选择不同的位置。

4.) 删除在 SplashScreen WPF 库中创建的默认“UserControl1.xaml”

5.) 右键单击​​ WPF 项目和“添加->窗口”,然后将其命名为 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”的属性并确保其“构建操作”设置为“资源”

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());
        }
    }
}
于 2012-10-29T18:18:03.620 回答
0
  1. 创建 Windows 窗体
  2. 将其设置FormBorderStyle为无
  3. 将其设置TransparencyKey为#00FF00
  4. 将其设置BackgroundImage为 png 图像,并将不需要的区域颜色设置为 #00FF00
  5. 完毕!

当您将图像加载为表单的背景图像时,它会将其每个像素与透明度键进行比较,如果匹配,则将该像素呈现为透明。

于 2012-10-29T18:54:33.483 回答