C# 在WPF中使用MDI的选项

C# 在WPF中使用MDI的选项,c#,.net,wpf,xaml,mdi,C#,.net,Wpf,Xaml,Mdi,我正在尝试编写一个使用MDI的应用程序,从某种意义上说,我有一个大winsdow和一个画布区域,其中有许多小窗口。这些小窗口可以在画布中调整大小、拖动和移动 通过使用此库,我已经完成了上述工作: 然而,这个库充满了bug,并且限制性极强(除了它是一个废弃的项目之外) 因此,我想知道在WPF中使用MDI还有哪些其他选择。我认为编写一个类似于上面链接的库太麻烦了——它基本上可以处理小窗口的拖动和大小调整,并确保它们不能被拖动到画布边缘之外。我认为自己编写代码并不容易 有什么想法吗?我想你应该用这个,

我正在尝试编写一个使用MDI的应用程序,从某种意义上说,我有一个大winsdow和一个画布区域,其中有许多小窗口。这些小窗口可以在画布中调整大小、拖动和移动

通过使用此库,我已经完成了上述工作:

然而,这个库充满了bug,并且限制性极强(除了它是一个废弃的项目之外)

因此,我想知道在WPF中使用MDI还有哪些其他选择。我认为编写一个类似于上面链接的库太麻烦了——它基本上可以处理小窗口的拖动和大小调整,并确保它们不能被拖动到画布边缘之外。我认为自己编写代码并不容易


有什么想法吗?

我想你应该用这个,它更酷:


它有选项卡、可调整大小的可固定窗格等,与Visual Studio非常相似。

我又看了一眼这个MDI库。我想我解决了这个问题。您希望MdiChild在单击时最大化

问题是,如果在主窗口的构造函数中将MdiChild的WindowsState设置为最大化,则无法获得预期的大小调整。因此,您需要确保加载了主窗口,然后确保加载了MdiChild。如果是这种情况,您可以通过编程方式设置MdiChild的WindowsState并获得预期的行为

有关加载的事件,请参阅以下示例代码(检查下面的完整源代码):

void Main_Loaded(object sender, RoutedEventArgs e)
{
    var mdiChild = new MdiChild
    {
        Title = "Window Using Code",
        Content = new ExampleControl(),
        Width = 500,
        Height = 450,
        Position = new Point(200, 30)
    };
    Container.Children.Add(mdiChild);
    mdiChild.Loaded +=new RoutedEventHandler(mdiChild_Loaded);
}

void mdiChild_Loaded(object sender, RoutedEventArgs e)
{
    if (sender is MdiChild)
    {
        var mdiChild = (sender as MdiChild);
        mdiChild.WindowState = WindowState.Maximized;
    }
}

下面是让它工作的方法。让我知道这是否有帮助。

WPF的新MDI选项:


GitHub项目:

请参见另一个SO问题,了解替代方案我不想要MDI的替代方案-我知道MDI功能正是我想要的。无论如何,我对此无能为力,因为这是规格的一部分。它必须是MDI。@Dot-NET我知道已经有一段时间了。。但很想知道您是否找到了在WPF中实现MDI的好解决方案。我尝试了问题中提到的库,并分享了类似的观点-除了有缺陷之外,当MDI内容是web浏览器控件时,它似乎工作不好。@ChintanS-不幸的是,我找不到更好的库。看起来好像大多数人都认为MDI已经死了,所以不要把它放在任何重要位置。我个人不同意,在我的场景中,MDI正是我所需要的,没有什么可以替代。我最后做的是使用这个库并在问题出现时修复它们。有相当多的bug,但幸运的是您可以完全访问代码。只需确保将库作为新项目加载,您可以随意更改它。@DotNET-Hmm。。对现在看来是这样的。谢谢你的意见:)不过我不确定这是否是我想要的。我所需要的就是在我的主应用程序中有多个小窗口——不多也不少。听起来你应该自己编写,管理子窗口并不是那么困难。问题是我最初尝试过这样做,但很难使用插件:/Hi,我不确定我是否完全理解,但我不希望窗口最大化。我真正想要的是它的大小与它的内容相同mdhild.HorizontalContentAlignment=horizontallignment.Stretch;mdiChild.VerticalContentAlignment=VerticalAlignment.Stretch?关于这个:mdiChild.HorizontalAlignment=HorizontalAlignment.Stretch;mdiChild.HorizontalContentAlignment=HorizontalAlignment.Stretch;mdiChild.VerticalAlignment=VerticalAlignment.Stretch;mdiChild.HorizontalAlignment=HorizontalAlignment.Stretch;还是没什么-窗户就是不让你进来,我帮不了你。控件的对齐方式可能有问题,或者某些属性设置不正确。我还向MdiChild添加了内容,它确实调整了大小。