2014-01-17 2 views
1

enter image description here캔버스 부적절 여기에서 이미지의 DockPanel

내부 TextBlock의 성분을 중첩 그것에 번호와 각 블록은 레이저를 나타낸다. 이러한 블록은 DockPanel 내부의 캔버스에 배치됩니다. 또한 상단에 도킹 된 DockPanel 내부에는 빨간색지도 캔버스 뒤에 숨어있는 빨간색 TextBlock이 있습니다. 왜 이런 일이 일어나는 걸까요? TextBlock은 DockPanel의 상단에 도킹되어 있으며 캔버스는 도크 설정이 없으므로 나머지 공간을 채 웁니다. 또한 참고 : 윈도우 크기 조정시 전체 중앙 화면 공간을 적절히 조정하려면 ViewBox 내부에 DockPanel을 배치해야했습니다. 그런 다음 필요할 때 스크롤 막대를 표시 할 수 있도록 ScrollViewer에 ViewBox를 배치해야했습니다.

다음은 가운데 화면의 XAML 코드입니다 (참고 : 창 자식은 DockPanel이며 메뉴는 상단에 도킹되고 왼쪽 단추 패널은 왼쪽에 도킹되며 오른쪽 단추 패널은 도킹 됨). 권리는, 상태 표시 줄에이 문제 해결에 어떤 도움이 크게 감사합니다

<ScrollViewer 
     Name="centerScreenScrollViewer" 
     VerticalScrollBarVisibility="Auto" 
     HorizontalScrollBarVisibility="{Binding IsScrollbarsVisible, Converter={StaticResource BoolToScrollbarVisConverter}, FallbackValue=Hidden}"> 
     <Viewbox> 
      <DockPanel 
       LastChildFill="True"> 
       <TextBlock 
        DockPanel.Dock="Top" 
        Name="tbkFullVisual" 
        Style="{StaticResource tbkStyleBlue}" 
        Foreground="Red" 
        IsEnabled="{Binding FullVisual}" 
        HorizontalAlignment="Center" 
        VerticalAlignment="Top" 
        FontSize="24"> 
        *** This Print Requires Full Visual Inspection! *** 
       </TextBlock> 
       <Canvas x:Name="mapCanvas"> 
        <ContentPresenter Content="{Binding MapCanvas}"/> 
       </Canvas> 
      </DockPanel> 
     </Viewbox> 
    </ScrollViewer> 

다음 XAML 코드에 의해 정의된다 당신이 중앙 화면에서 볼 수있는 바닥 및 모든)에 도킹됩니다.

감사합니다,

카일

답변

2

이 방식과 관련이있다 그 Canvas 요소와 특히 ViewBox 작품. ViewBox은 자식 요소의 크기를 조정하는 데 사용됩니다.

  1. TextBlock 모든 공간을 얻을 것을 의미합니다 HeightWidth가 0 인 기본, 상기 Canvas 요소와이 문제가 있습니다.
  2. Canvas 요소를 사용하면 자체 경계 밖으로 그릴 수 있으므로 캔버스가 작거나 보이지 않는 경우에도 숫자 표를 렌더링 할 수 있습니다.

가장 빠른 솔루션에 VerticalAlignment을 설정하는 것입니다 ViewBox :

<Viewbox VerticalAlignment="Top"> 
    ... 
</Viewbox> 

당신은 캔버스에 Height을 설정할 수 있습니다,하지만 난 당신이 동적으로 변경하고 싶지 않기 때문에이 덜 이상적인 생각 창 크기 조정.

+0

잘 작동합니다. 고마워, 나는이 대답을 받아 들일 것이다. 하지만 먼저, 당신을위한 또 하나의 빠른 질문 : 캔버스 아이들이 그 경계를 벗어나지 않도록 어떻게 만들 수 있습니까? ClipToBounds = True를 사용했지만 캔버스에 정의 된 크기가 없으므로 나사가 위로 고정됩니다. 어떤 제안? 내가 할 수있는 유일한 생각은 OnWindowResize를 재정의하는 것입니다. 여기서 캔버스의 높이와 너비를 뷰포트 높이와 뷰포트의 뷰포트 너비로 설정합니다. – kformeck

+0

'ViewBox'를 다시 생각하고 대신'DockPanel'을 가지고 있습니다. 'ViewBox'의 주요 목적은 크기 조정시 가로 세로 비율과 스케일링을 유지하는 것입니다. 이 경우 캔버스가 자동으로 사용 가능한 공간을 채우고 싶다면'ViewBox'가 막을 수 있습니다. Canvas의 'Width'를 ViewBox의'Width '에 바인딩 한 다음'Height '를 바인드하려고 시도 할 수도 있지만 변환기를 사용하여'TextBlock' 높이를 뺍니다. 그러나 이것은 정말로 추한 것입니다. @kformeck – Matt