【发布时间】:2011-07-04 11:01:23
【问题描述】:
为什么 Canvas 覆盖了 Dock 面板的其他子项? 我正在按照 xaml 中的标准约定在客户区顶部设置一个菜单栏,在窗口客户区底部设置一个状态栏,如下所示:
<Window x:Class="RichCoreW.ScenEditWnd"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="ScenEditWnd" Height="490" Width="776" HorizontalAlignment="Right">
<DockPanel Name="mapDockP">
<Menu IsMainMenu="True" DockPanel.Dock="Top">
<MenuItem Header="File">
<MenuItem Header="Save" Name="menuISave" Click="menuISave_Click"/>
<MenuItem Header="Make Playable" Click="MakePlayable" />
</MenuItem>
<MenuItem Command="ApplicationCommands.Help" />
</Menu>
<StackPanel DockPanel.Dock="Bottom" Name="stackPanel1" Orientation="Horizontal" background="Yellow">
<Label Content="Playable:" Name="label1" />
<Label Name="labPlayable" />
</StackPanel>
</DockPanel>
</Window>
然后我在 C# 代码中添加一个继承自 Canvas 的 MapCanvEdit 类的实例,如下所示。作为要添加到 Dockpanel 的最后一个子项,它应该占用 Dockpanel 中的剩余空间。但它涵盖了菜单和状态栏,也涵盖了整个客户区。准确地说,是 Canvas 的子级覆盖了其他两个 Stack Panel。在 Canvas(MapCanvEdit) 为空的地方,您可以看到菜单和状态栏:
public partial class ScenEditWnd : Window
{
ScenC scenC;
MapCanvEdit mapCanvE;
public ScenEditWnd(ScenC scenCI)
{
InitializeComponent();
scenC = scenCI;
mapCanvE = new MapCanvEdit(scenC);
mapDockP.Children.Add(mapCanvE);
MouseWheel += mapCanvE.Zoom;
mapCanvE.SizeChanged += delegate { mapCanvE.DrawHexs(); };
ContentRendered += delegate { mapCanvE.DrawHexs(); };
labPlayable.Content = scenC.playable.ToString();
}
}
为简单起见,我省略了其他方法。任何帮助表示赞赏!
【问题讨论】:
标签: wpf