首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF设计器启动进程

WPF设计器启动进程
EN

Stack Overflow用户
提问于 2018-11-26 18:35:39
回答 1查看 44关注 0票数 0

我正在做一个direct3d12应用程序,我想为它编写一个编辑器。这个应用程序是C++,但是编辑器是用WPF完成的,我从WPF向进程发送HWND,然后进程创建到WindowsFormsHost面板的交换链。我在自定义控件构造函数中启动了该进程,由于某种奇怪的原因,该构造函数启动了锁定exe的进程。在真正运行WPF应用程序之前,如何停止设计器以运行该进程?

代码语言:javascript
复制
public partial class RenderWindow : UserControl
{
    Process AberrationEngine = new Process();
    public RenderWindow()
    {
        InitializeComponent();

    }

    private void UserControl_Unloaded(object sender, RoutedEventArgs e)
    {
        if (!AberrationEngine.HasExited)
        {
            AberrationEngine.Kill();
        }
    }

    private void UserControl_Loaded(object sender, RoutedEventArgs e)
    {
        IntPtr HWND = RenderWindowBase.Handle;

        AberrationEngine.StartInfo.FileName = @"C:\Users\nagylas\Desktop\AberrationEngineNextGen\x64\Release\AberrationEngine.exe";
        AberrationEngine.StartInfo.Arguments = "--editor --handle " + HWND.ToString();
        AberrationEngine.StartInfo.UseShellExecute = false;
        AberrationEngine.StartInfo.WorkingDirectory = @"C:\Users\nagylas\Desktop\AberrationEngineNextGen\AberrationEngine";
        AberrationEngine.Start();
    }
}

和XAML

代码语言:javascript
复制
<Window x:Class="AberrationEditor.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:AberrationEditor"
    xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
    xmlns:xcad="http://schemas.xceed.com/wpf/xaml/avalondock"
    xmlns:vs2013="clr-namespace:AvalonDock.Themes.VS2013;assembly=AvalonDock.Themes.VS2013"
    xmlns:s="clr-namespace:System;assembly=mscorlib"
    xmlns:brcr="clr-namespace:AberrationEditor.CustomControls"
    mc:Ignorable="d"
    Title="MainWindow" Height="900" Width="1600" Background="#FF2D2D30">
<Window.Resources>
    <Style TargetType="MenuItem">
        <Setter Property="Background" Value="#FF2D2D30" />
        <Setter Property="BorderBrush" Value="#FF2D2D30" />
        <Setter Property="Foreground" Value="LightGray" />
        <Setter Property="BorderThickness" Value="0" />
    </Style>

    <Style TargetType="Separator" x:Key="{x:Static MenuItem.SeparatorStyleKey}">
        <Setter Property="OverridesDefaultStyle" Value="True" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Separator">
                    <Border Background="#FF888888" Height="1" />
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>

    <StackPanel Orientation="Horizontal">
        <Menu>
            <MenuItem Header="_File">
                <MenuItem Header="_New" />
                <Separator />
                <MenuItem Header="_Exit" />
            </MenuItem>
            <MenuItem Header="_View">
                <MenuItem Header="_New" />
            </MenuItem>
        </Menu>
    </StackPanel>
    <xcad:DockingManager Grid.Row="1" AllowMixedOrientation="True" BorderBrush="Black" BorderThickness="1">
        <xcad:DockingManager.Theme>
            <vs2013:Vs2013DarkTheme/>
        </xcad:DockingManager.Theme>
        <xcad:DockingManager.DocumentHeaderTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <Image Source="{Binding IconSource}" Margin="0,0,4,0"/>
                    <TextBlock Text="{Binding Title}" />
                </StackPanel>
            </DataTemplate>
        </xcad:DockingManager.DocumentHeaderTemplate>
        <xcad:LayoutRoot x:Name="_layoutRoot">
            <xcad:LayoutPanel Orientation="Horizontal">
                <xcad:LayoutDocumentPaneGroup >
                    <xcad:LayoutDocumentPane>
                        <xcad:LayoutDocument ContentId="document1" Title="Document 1">
                            <TextBox Text="Document 1 Content" AcceptsReturn="True"/>
                        </xcad:LayoutDocument>
                        <xcad:LayoutDocument ContentId="document2" Title="Document 2">
                            <brcr:RenderWindow></brcr:RenderWindow>
                        </xcad:LayoutDocument>
                    </xcad:LayoutDocumentPane>
                </xcad:LayoutDocumentPaneGroup >
            </xcad:LayoutPanel>
        </xcad:LayoutRoot>
    </xcad:DockingManager>
</Grid>

EN

回答 1

Stack Overflow用户

发布于 2018-11-26 21:17:09

您可能应该检查一下这是否是设计模式。您可以使用DesignerProperties.GetIsInDesignMode函数来完成此操作。

Documentation

所以,基本上是这样的:

代码语言:javascript
复制
if (!DesignerProperties.GetIsInDesignMode(this))
{
    //your code running the process
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53479258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档