2009-10-17 60 views
16

這應該是這麼簡單 - 我一直在我的頭靠在我的辦公桌上長時間努力做一個看起來很簡單的任務工作(讓我覺得WPF是不直觀或越野車)...WPF - 如何向右對齊水平方向的堆棧面板內的文本塊?

在無論如何,我有一個設置爲水平方向的Stackpanel。在裏面我有兩個TextBlocks。我希望第二個將文本顯示在右側。

我該如何實現它?

這麼做會讓我想起爲什麼我會離開Silverlight。 :p

回答

2

根據您的意見,下面是另一個示例,其中顯示了幾種實現所需功能,網格佈局和DockPanel佈局的方法。從它的聲音來看,DockPanel佈局可能就是你想要的。如果這不起作用,您可能需要更清楚地描述您所需的佈局和屬性。

<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

反正有沒有明確定義寬度嗎?我希望表單能夠伸展以填充任何區域。 這是我一直存在的問題的一部分 - 沒有辦法,我發現說「寬度= 100%」 – bugfixr 2009-10-17 18:40:37

+0

由於您的StackPanel有一個水平方向,TextBlocks只是保持堆疊,以及水平。沒有寬度,TextBlock將根據其內容調整大小。 一些想法:刪除TextBlock Width並將StackPanel設置爲Orientation =「Vertical」,每個TextBlock現在將佔用StackPanel的可用寬度的100%。或者,您可以嘗試使用網格佈局進行試驗。 不知道你想要什麼佈局,這是一個猜謎遊戲。 – 2009-10-17 18:53:27

+1

我同意他可能需要StackPanel以外的東西(因爲你給的原因),但對於他談論的簡單佈局,我會建議使用DockPanel而不是Grid。 – itowlson 2009-10-17 18:57:12

24

如果你不想像StackPanel那樣堆疊所有的元素,你需要使用一個DockPanel。爲了使第二TextBlock中爲右對齊,你可以添加一個額外的虛擬的TextBlock,以填補他們之間的區域:

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

或者你可以使用TextAlignment屬性:

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

工作!感謝您的時間和努力:) – 2015-04-20 09:15:04

1

它可以通過使用網格很容易存檔,因爲我有同樣的問題:)

<Grid> 
    <TextBlock>Left text</TextBlock> 
    <TextBlock TextAlignment="Right">Right text</TextBlock> 
</Grid>