2009-10-17 18 views
16

これはとても簡単でなければなりません - 私は長い間私の机のに対して私の頭を打つseemlingly単純な作業の仕事をしようとしてきたWPF - 水平方向のスタックパネル内でテキストブロックを右揃えにする方法は?

で...(非直観的またはバグがある私は、WPFのように感じさせます)いずれにしても、私は水平方向に設定されたStackpanelを持っています。その中には2つのTextBlockがあります。私は2番目のものにそれを右に表示させたい。

どのようにすれば実現できますか?

これを行うと、なぜ私は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

+0

StackPanelには水平方向があるので、TextBlocksはちょうど水平に積み重ねられます。幅がなければ、TextBlockは内容に合わせてサイズを変更します。 考えてみましょう:TextBlock Widthを削除し、StackPanelをOrientation = "Vertical"に設定すると、各TextBlockはStackPanelの利用可能な幅の100%を占めるようになります。または、グリッドレイアウトを試してみてください。 レイアウトに必要なものを正確に把握していないと、それはちょっとした推測ゲームです。 –

+1

私は彼が多分StackPanel以外のものを望んでいることに同意しますが(あなたが与えた理由で)、単純なレイアウトについては、GridではなくDockPanelを提案します。 – itowlson

24

StackPanelのようにすべての要素を積み重ねたくない場合は、DockPanelを使用する必要があります。

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

それとも、TextAlignment属性を使用することができます:

を右揃えに2つ目のTextBlockを引き起こすために、あなたはそれらの間の領域を埋めるために、余分なダミーのTextBlockを追加することができます
<DockPanel> 
     <TextBlock>Left text</TextBlock> 
     <TextBlock TextAlignment="Right">Right text</TextBlock> 
    </DockPanel> 
+0

Worked!あなたの時間と努力のおかげで:) –

1

私は同じ問題があるので、グリッドを使って非常に簡単にアーカイブすることができます:)

<Grid> 
    <TextBlock>Left text</TextBlock> 
    <TextBlock TextAlignment="Right">Right text</TextBlock> 
</Grid> 
関連する問題