开发者

Why is Canvas covering peer controls in Dockpanel?

Why is the Canvas covering the other Children of the Dock Panel? I'm setting up a menu bar at the top of the client area and a status bar at the bottom of the client area of the window as per standard convention in xaml as follows:

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

Then I add a an instance of the MapCanvEdit Class which inherits from Canvas in C# code as follows. As its the last child to be added to the Dockpanel it should take the remaining space in the Dockpanel. But it covers the menu and status bars as well covering the whole of the client area. To be precise it is the children of the Canvas that cover over the other two Stack Panels. Where the Canvas(MapCanvEdit) is empty you can see the Menu and Status bars:

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开发者_如何学JAVA = scenC.playable.ToString();
    }
}

I've left out the other methods for simplicity. Any help appreciated!


It's just the way Canvas works. It can place its children outside its own area. If you want it to restrict children to bounds set ClipToBounds="True" (see ClipToBounds on MSDN) or use another panel.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜