在WPF中使用MDI的选项

时间:2012-10-21 14:17:24

标签: c# .net wpf xaml mdi

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

我使用此库完成了上述操作:http://wpfmdi.codeplex.com/

然而,该库充满了错误并且极其严格(除了它是一个废弃的项目)。

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

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

我认为你应该使用它,它更酷:

http://avalondock.codeplex.com/

它有标签,可调整大小的可停靠窗格等。非常类似于Visual Studio。

答案 1 :(得分:0)

我又看了一下这个MDI库。我想我解决了这个问题。您希望MdiChild最大化,就像单击它时一样。

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

请参阅以下示例代码(查看下面的完整源代码)以了解Loaded-events:

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;
    }
}

这是使source code成功的{{3}}。如果这有帮助,请告诉我。

答案 2 :(得分:0)