一种将WPF窗口添加到C#表单应用程序中的方法

时间:2012-10-29 18:09:27

标签: c# .net wpf forms wpf-controls

我想让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

2 个答案:

答案 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)

  1. 创建Windows表单
  2. 将其FormBorderStyle设置为无
  3. 将其TransparencyKey设置为#00FF00
  4. 将其BackgroundImage设置为png图像,其中不需要的区域颜色设置为#00FF00
  5. 完成!
  6. 当您将图片作为表单的背景图片加载时,它会将其每个像素与透明度键进行比较,如果匹配,则会将该像素渲染为透明。