0

在我的测试中,我创建了一个像这样的简单类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;

namespace Test
{
    public class MyCustomWindow: Window
    {

    }
}

这个类被编译成一个dll。在另一个项目中,我尝试使用这个自定义窗口,如下所示:

<Custom:MyCustomWindow x:Class="MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:Custom="clr-namespace:Test;assembly=Test"
    Title="MainWindow" Height="600" Width="1210" WindowState="Maximized" >

   <Grid Background="Blue">
       <Button Content="Button" HorizontalAlignment="Left" Margin="457,212,0,0" VerticalAlignment="Top" Width="75"/> 
   </Grid>

这个东西编译没有错误,当自定义窗口由 App.xaml 文件中的“StartupUri”打开时效果很好(定义了第一个加载的窗口)。

但是,如果我将其他窗口设置为在 StartupUri 中加载,并且:

MainWindow m = new MainWindow();
m.Activate();
m.Show();
this.Close();

CustomWindow 将打开,但没有任何内容,没有按钮和蓝色网格 - 甚至没有标题。

任何解决方法?我需要做什么才能打开一个与 StartupUri 行为相同的窗口?

编辑:

我注意到 MainWindow(或从 MyCustomWindow 派生的任何窗口)根本不能在构造函数中使用 InitializeComponent() 方法,因为它在上下文中不存在。奇怪的是,当使用 StartupUri 时,没有这个,内容是正常加载的。

编辑2:

我认为问题正在发生,因为我无法将 InitializeComponent() 方法放在 MyCustomWindow 中。这就解释了为什么 MainWindow 可以正常加载到 StartupUri 中:它是直接从 xaml 文件加载的,因此无需 InitializeComponent 即可解析内容。

我开始考虑实现 IComponentConnector 接口,但我不知道该怎么做。

编辑3:

文件 MainWindow.xaml.cs 的代码隐藏是:

using Test;

namespace TestingCustomWindow
{
    public partial class MainWindow : MyCustomWindow
    {
        public MainWindow()
        {
              // Cannot use InitializeComponent here
        }
    }
}
4

2 回答 2

1

我认为构造函数必须看起来像这样

public class MyCustomWindow: Window
{
    InitializeComponent();
}
于 2013-08-30T06:11:50.620 回答
1

请使用 Visual Studio 添加新窗口并将 :Window 替换为 :MyCustomWindow。您将获得初始化组件。您还必须使用 xaml 中的 CustumWindow 标记更新窗口标记

将其添加为答案,以便其他人可以使用它。

谢谢

于 2013-08-31T04:27:09.173 回答