wpf 怎么在窗口里面显示一个窗口!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wpf 怎么在窗口里面显示一个窗口!相关的知识,希望对你有一定的参考价值。

参考技术A

在工程里面new一个window类MyWin,然后再你的引用MainWindow类里面这样写:


public partial class MainWindow : Window

        public MainWindow()

       

            InitializeComponent(); 

     MyWin mywin = new MyWin();
     mywin.show();

       

 

追问

你还没有理解我的意思!我说的是在里面显示!是复合窗台! 谢谢!能继续帮助我吗?或者给一个类似窗体的自定义控件的代码!谢谢!

追答

MDI形式的是吧

参考技术B A a = new A ( ) ; //窗口A是里面的窗体
a.MdiParent=this; // this 是外面的窗体追问

我说的是WPF 不是 WinForm ! 要是知道wpf 请帮助我!

追答

不知道了

参考技术C Window1 win = new Window1();
win.Show();追问

你还没有理解我的意思!我说的是在里面显示!是复合窗台! 谢谢!能继续帮助我吗?或者给一个类似窗体的自定义控件的代码!谢谢!

追答

恕我无知,我不知道什么是复合窗体。。。在里面显示你自己弄个Grid或其他容器就可以了,里面放随便的表格布局。根据页面逻辑控制容器控件的Visibility。

如何在 WPF 窗口中显示屏幕保护程序的预览

【中文标题】如何在 WPF 窗口中显示屏幕保护程序的预览【英文标题】:How to show a preview of screen saver inside WPF window 【发布时间】:2013-09-04 01:18:09 【问题描述】:

我希望能够在 WPF 窗口中显示屏幕保护程序的预览。 (使用容器或控件或...)我知道 Windows 本身将“/p”参数传递给屏幕保护程序以获取预览。但是如何在我的 WPF 应用程序中显示该预览?我应该处理它并将其父级更改为我的容器或控件吗?怎么样?

【问题讨论】:

【参考方案1】:

您需要使用 Windows.Forms 互操作,因为屏幕保护程序需要窗口句柄 (HWND),而在 WPF 中,只有***窗口有它们。

MainWindow.xaml

<Window x:Class="So18547663WpfScreenSaverPreview.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:forms="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
        Title="Screen Saver Preview" Height="350" Width="525"
        Loaded="MainWindow_OnLoaded" Closed="MainWindow_OnClosed"
        SizeToContent="WidthAndHeight">
    <StackPanel Orientation="Vertical" Margin="8">
        <TextBlock Text="Preview"/>
        <WindowsFormsHost x:Name="host" Width="320" Height="240">
            <forms:Control Width="320" Height="240"/>
        </WindowsFormsHost>
    </StackPanel>
</Window>

MainWindow.xaml.cs

using System;
using System.Diagnostics;
using System.Windows;

namespace So18547663WpfScreenSaverPreview

    public partial class MainWindow
    
        private Process saver;

        public MainWindow ()
        
            InitializeComponent();
        

        private void MainWindow_OnLoaded (object sender, RoutedEventArgs e)
        
            saver = Process.Start(new ProcessStartInfo 
                FileName = "Bubbles.scr",
                Arguments = "/p " + host.Child.Handle,
                UseShellExecute = false,
            );
        

        private void MainWindow_OnClosed (object sender, EventArgs e)
        
            // Optional. Screen savers should close themselves
            // when the parent window is destroyed.
            saver.Kill();
        
    

程序集参考

WindowsFormsIntegration System.Windows.Forms

相关链接

Walkthrough: Hosting a Windows Forms Control in WPF Creating a Screen Saver with C#(描述命令行参数)

【讨论】:

非常感谢。完美运行。 更新了代码,现在减少了代码隐藏。 Windows.Forms.Control 在 XAML 中创建。这是我第一次使用 Windows 窗体互操作;看起来 MSDN 上的说明有点复杂。 saver.Kill();有必要的!在我的测试中,它并没有自行关闭。 如何在主机中加载另一个屏幕保护程序?我试过了:if(saver != null &amp;&amp; saver.HasExited == false) saver.Kill(); saver = new Process(); saver = Process.Start(new ProcessStartInfo FileName = (comboScreenSavers.SelectedItem as ComboBoxItem).Tag.ToString(), Arguments = "/p " + hostScreenSaver.Child.Handle, UseShellExecute = false, ); 但是一团糟…… 如果我理解正确,你想避免杀死进程吗?屏幕保护程序在您的控件内创建一个子窗口。您可以尝试向其发送 WM_CLOSE 消息。不确定屏幕保护程序会响应它,但值得一试。

以上是关于wpf 怎么在窗口里面显示一个窗口!的主要内容,如果未能解决你的问题,请参考以下文章

WPF:用主窗口生成了一个窗口,怎么在新窗口控制主窗口的textblock显示文字?

我在用VB写WPF程序,有一个窗口显示的问题

WPF编程窗口在哪启动?

wpf怎么自定义窗口

wpf 如何让弹出窗口总在屏幕范围之内?

WPF打开PPT文件,怎么让其PPT的幻灯片窗口一直处于最前端,但是可以操作其他东西!