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 がタブ内に配置されていることも言及する価値があると思います。タブを変更してコンテナーのあるタブに戻すと、ウィンドウが表示されることに気付きました。したがって、それはある種のさわやかな問題でしょうか?