2011-07-04 10 views
0

Canvas가 Dock Panel의 다른 Children을 덮는 이유는 무엇입니까? 내가 XAML에서 표준 규칙에 따라 윈도우의 클라이언트 영역의 맨 아래에있는 클라이언트 영역의 상단에 메뉴 바 및 상태 표시 줄을 설정하고있어 다음과 같이Dockpanel에서 피어 컨트롤을 다루는 캔버스가 왜입니까?

그런 다음
<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의 나머지 공간을 차지해야합니다. 그러나 클라이언트 영역 전체를 커버하는 메뉴 및 상태 표시 줄을 포함합니다. 정확히 말하자면, 다른 두 개의 스택 패널을 덮는 캔버스의 자식입니다. 캔버스 (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(); 
    } 
} 

. 어떤 도움을 주셔서 감사합니다!

답변

1

캔버스가 작동하는 방식입니다. 그것은 자신의 지역 밖에 아이들을 배치 할 수 있습니다. 자식을 경계로 제한하려면 ClipToBounds="True" (MSDN의 ClipToBounds 참조)을 설정하거나 다른 패널을 사용하십시오.

+0

감사합니다. WPF의 경우 매우 간단합니다. 확인하고 클리핑이 성능을 향상시키지 않는 것 같습니다. WPF는 화면 밖으로 벗어나는 아이들을 렌더링하는 데 시간을 낭비하는 것 같습니다. –

+0

이것이 맞습니다. 그렇게하지 말라고하면 UI 가상화 기술 (google에 키워드 : wpf 가상 화 캔버스)을 사용하는 것이 좋습니다. – Anvaka

관련 문제