我正在使用http://wpfmdi.codeplex.com/库来处理我的 WPF 应用程序中的 MDI。
我有一个包含子容器的 Canvas,其中包含许多小窗口。我希望在 x=500, y=500 的位置打开窗户。我已经设法用我当前的代码实现了这一点,但奇怪的是,当第一个窗口打开时,它没有显示 - 即画布保持空白。然后,一旦我添加另一个窗口,两个窗口都会出现在正确的位置。
下面我粘贴了我的 XAML 和在画布中打开一个新窗口的代码。
<Window x:Name="VisualQueryBuilderWindow" x:Class="QueryBuilder.VisualQueryBuilder"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mdi="clr-namespace:WPF.MDI;assembly=WPF.MDI"
Title="Visual Query Builder" WindowState="Maximized" Closing="VisualQueryBuilderWindow_Closing">
<Window.Resources>
<Style TargetType="TreeView">
<Setter Property="Padding" Value="0,0,20,0"/>
<Setter Property="BorderBrush" Value="Gray"/>
<Setter Property="BorderThickness" Value="0,0,5,0"/>
</Style>
</Window.Resources>
<Grid>
<DockPanel LastChildFill="True">
<TreeView DockPanel.Dock="Left"
Name="tvSchema"
AllowDrop="True"
TreeViewItem.PreviewMouseLeftButtonDown="TreeViewItem_PreviewMouseLeftButtonDown">
</TreeView>
<TabControl>
<TabItem Name="tabQueryBuilder" Header="Query Builder">
<Canvas Name="cnvsMain" Background="LightGray" AllowDrop="True" Drop="cnvsMain_Drop">
<mdi:MdiContainer Name="mainContainer" Background="LightGray">
</mdi:MdiContainer>
</Canvas>
</TabItem>
<TabItem Name="tabResults" Header="Results"></TabItem>
</TabControl>
</DockPanel>
</Grid>
TableWindow tableWindow = new TableWindow(tableName);
MdiChild child = new MdiChild()
{
MaximizeBox = false,
MinimizeBox = false,
Resizable = true,
ShowIcon = false,
Title = tableName,
Content = tableWindow.Content as UIElement //Opens new instance of my window class
};
mainContainer.Children.Add(child);
child.Position = new Point(500, 500);
请注意,我也尝试在 MdiChild 实例化块内设置位置,但它在那里也不起作用。
更新:我认为值得一提的是,我的 MdiContainer 放置在一个选项卡中,我注意到如果我更改选项卡并切换回带有容器的选项卡,窗口就会显示。因此,这可能是某种令人耳目一新的问题吗?