2009-10-17 10 views
16

Bu kadar basit olmalı - Çok uzun zamandır masamın karşı başımı vurarak bir seemlingly basit bir görev çalışması için çalışıyorumWPF - Bir metin bloğunu yatay yönlendirilmiş bir yığın bölmesinde nasıl sağa hizalayabilirsiniz?

yılında ... (un-sezgisel veya adamcağız beni WPF gibi hissettiren) Her durumda, yatay yönlendirmeye ayarlanmış bir Stackpanel var. İçinde iki TextBlock var. İkincisinin, metni sağa göstermesini istiyorum.

Bunu nasıl yapabilirim?

Tüm bunları yapmak bana neden Silverlight'tan uzaklaştığımı hatırlatıyor. : p

cevap

2

Yorumlarınız ışığında, istediğiniz şeyi, Kılavuz düzenini ve DockPanel düzenini gerçekleştirmenin birkaç yolunu gösteren başka bir örnek. Bunun seslerinden, DockPanel düzeni muhtemelen sizin aradığınız şeydir. Bu işe yaramazsa, istediğiniz düzen ve özelliklerin daha açık bir tanımını sağlamanız gerekebilir.

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
<Grid> 
    <Grid.RowDefinitions> 
    <RowDefinition Height="0.45*" /> 
    <RowDefinition Height="0.05*" /> 
    <RowDefinition Height="0.45*" /> 
    </Grid.RowDefinitions> 
    <Grid Grid.Row="0"> 
     <Grid.ColumnDefinitions> 
     <!-- note: you don't need to declare ColumnDefintion 
     widths here; added for clarity. --> 
     <ColumnDefinition Width="0.5*" /> 
     <ColumnDefinition Width="0.5*" /> 
     </Grid.ColumnDefinitions> 
     <TextBlock 
      Grid.Column="0" 
      Background="Tomato" 
      TextWrapping="Wrap">I'm on the left</TextBlock> 
     <TextBlock 
      Grid.Column="1" 
      Background="Yellow" 
      TextAlignment="Right" 
      TextWrapping="Wrap">I'm on the right</TextBlock> 
    </Grid> 

    <Grid Grid.Row="1" Background="Gray" /> 

    <DockPanel Grid.Row="2"> 
     <TextBlock 
      DockPanel.Dock="Left" 
      Background="Tomato" 
      TextWrapping="Wrap">I'm on the left</TextBlock> 
     <TextBlock 
      DockPanel.Dock="Right" 
      Background="Yellow" 
      TextAlignment="Right" 
      TextWrapping="Wrap">I'm on the right</TextBlock> 
    </DockPanel> 
</Grid> 
</Page> 
+0

Genişliği açıkça tanımlamaksızın bunu yapmak zaten var mı? Formun herhangi bir alanı doldurmak için gerilmesini istiyorum. Bu, şu anda yaşadığınız sorunun bir parçası - "Genişlik =% 100" demek için hiçbir yol bulamadım. – bugfixr

+0

StackPanel'in bir Yatay yönlendirmesi olduğundan, TextBlock'lar sadece yatay ve iyi bir şekilde yığınlamaya devam ediyor. Genişlik olmadan, TextBlock içeriğine sığacak. Birkaç fikir: TextBlock Genişliğini kaldırın ve StackPanel'i bir Orientation = "Vertical" olarak ayarlayın ve her TextBlock şimdi StackPanel'in kullanılabilir genişliğinin% 100'ünü alacaktır. Ya da bir Grid mizanpajı denemeyi deneyebilirsiniz. Düzeniniz için tam olarak ne istediğini bilmeden, bu biraz tahmin oyunu. –

+1

Muhtemelen StackPanel'den başka bir şey istediğine katılıyorum (verdiğiniz için), ancak basit bir şekilde konuştuğu için, bir Izgaradan ziyade bir DockPanel öneririm. – itowlson

24

Tüm öğelerin StackPanel gibi yığılmasını istemiyorsanız, bir DockPanel kullanmanız gerekir.

<DockPanel> 
     <TextBlock>Left text</TextBlock> 
     <TextBlock DockPanel.Dock="Right">Right text</TextBlock> 
     <TextBlock /> 
    </DockPanel> 

Yoksa TextAlignment özelliğini kullanabilirsiniz: Sağ-align ikinci TextBlock neden için, aralarındaki alanı doldurmak için ekstra bir kukla TextBlock ekleyebilir

<DockPanel> 
     <TextBlock>Left text</TextBlock> 
     <TextBlock TextAlignment="Right">Right text</TextBlock> 
    </DockPanel> 
+0

Çalışıyor! Zaman ayırdığınız için teşekkürler. –

1

Aynı problemi aldığım için ızgarayı kullanarak kolayca arşivlenebilir :)

<Grid> 
    <TextBlock>Left text</TextBlock> 
    <TextBlock TextAlignment="Right">Right text</TextBlock> 
</Grid> 
İlgili konular