web-dev-qa-db-ja.com

WPF-水平方向のスタックパネル内でテキストブロックを右揃えにする方法は?

これはとても単純なはずです-私は長い間、一見単純なタスクを機能させようとして机に頭をぶつけてきました(WPFが直感的でないかバグがあるように感じます)...

いずれにせよ、私は水平方向に設定されたStackpanelを持っています。その中には2つのTextBlockがあります。 2番目のテキストを右側に表示してほしい。

どうすればそれを達成できますか?

これらすべてを行うことで、Silverlightから離れた理由を思い出します。 :p

17
bugfixr

StackPanelのようにすべての要素をスタックしたくない場合は、DockPanelを使用する必要があります。 2番目の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>
30
splintor

あなたのコメントに照らして、これはあなたが望むことを達成するためのいくつかの方法、グリッドレイアウトと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>
2
Metro Smurf

私は同じ問題を抱えているので、グリッドを使用して非常に簡単にアーカイブできます:)

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