2011-11-18 6 views
0

Windows Phone 7 XAML 프로그래밍에 대한 질문이 있습니다.XAML 가로 맞춤

<StackPanel Orientation="Vertical" Width="110"> 
    <Canvas Margin="0"> 
     <TextBlock Text="{Binding Menesis}" Foreground="{Binding MyColor}"></TextBlock> 
    </Canvas> 
    <Canvas Margin="0,12,0,0"> 
     <TextBlock Text="{Binding Datums}" Foreground="{Binding MyColor}" FontSize="85" HorizontalAlignment="Center" TextAlignment="Center" /> 
    </Canvas> 
    <Canvas Margin="0,105,0,0"> 
     <TextBlock Text="{Binding Nedelas_diena}" Foreground="{Binding MyColor}" /> 
    </Canvas> 
</StackPanel> 

방법을 중심으로 TextBlock (바인딩 데이텀) 텍스트를 만드는 방법? 현재 그것은 오른쪽에 정렬되어

HorizontalAlignment="Center" 

또는

TextAlignment="Center" 

이 작동하지 않습니다.

+1

왜 Canvas에 TextBlock을 래핑합니까? 캔버스는 컨트롤을 특정 X, Y 좌표에 특정 폭과 높이로 배치하는 경우에만 유용합니다. Grids 및 StackPanels와 같은 컨트롤은 사용 가능한 영역에 따라 다른 컨트롤의 레이아웃과 크기를 제어하도록 설계되었습니다. – Will

답변

4

캔버스에 TextBlock이있는 경우 캔버스 컨트롤 내부에 TextBlack이 0,0 (왼쪽 위)에 배치되고 (너비를 명시 적으로 설정하지 않는 한) TextBlack이 늘어나서 정렬에 문제가 있습니다. 포함 된 텍스트에 적합합니다. 기본적으로 텍스트는 항상 왼쪽 정렬됩니다.

Canvas 컨트롤은 포함 된 요소의 정확한 위치를 설정해야하는 경우에만 사용해야합니다. 그렇지 않은 경우에는 Grid, StackPanel 또는 ContentControl과 같은 다른 컨테이너를 사용하십시오.

xaml에서 Canvas를 제거하면 올바르게 작동합니다. 당신은 폭 400 픽셀을하는 ContentControl을있는 경우 을하면 100 픽셀 폭, 다음이 참입니다 텍스트 내용과 폭 200 픽셀로 설정되는 그것에 TextBlock에 추가 :

는 TextAlignment 대 HorizontalAlignment로를 명확히하기 위해

  • HorizontalAlignment를 가운데로 설정하면 TextBlock (200px 너비)을 ContentControl의 가운데로 정렬하지만 텍스트는 여전히 TextBlock 내에서 왼쪽 정렬됩니다. 즉, 텍스트가 왼쪽에서 100px 오프셋됩니다.
  • TextAlignment가 가운데로 설정된 경우 TextBlock은 왼쪽 정렬되지만 내부 텍스트는 가운데에 배치됩니다. 즉, 텍스트가 왼쪽에서 50 픽셀 오프셋됩니다.

내 의견으로는 여기서 가장 좋은 방법은 너비를 설정하지 않고 TextAlignment 속성을 설정하는 것입니다. 이것은 (대부분의 컨테이너에서) TextBlock이 컨테이너의 전체 너비와 텍스트가 적절하게 정렬 된 상태로 늘어나게된다는 것을 의미합니다.

+0

응답에 대한 감사, 그리드로 시도합니다 – Karloss

+0

그리드와 완벽하게 작동했습니다! 코드도 더 읽기 좋게되었습니다. – Karloss

0

스택 패널과 캔버스를 사용하는 대신. 둘 중 하나는 그리드를 사용할 수 있습니다. 눈금을 사용하는 경우 컨트롤을 배치해야하는 정확한 위치를 지적 할 수 있습니다. 예를 들어 대한 ,

< ----- 높이 ->이 같은

. 캔버스를 사용할 필요가 없습니다. 캔버스 컨테이너는 주로 게임 디자인 목적의 경우에 사용됩니다.

+0

감사의 말을 전하겠습니다. – Karloss