18

StatusBarの C# アプリケーションには 4 つの項目があります。StatusBarItems私は基本的に最後の2つを右にフロートさせたいと思っています。両方を で設定してみましたHorizontalAlignment="Right"が、最後の項目でしか機能しませんでした。

<StatusBar Name="statusBar1" Height="23" HorizontalAlignment="Stretch"
        VerticalAlignment="Bottom">
    <StatusBarItem />
    <StatusBarItem />
    <StatusBarItem HorizontalAlignment="Right" />
    <StatusBarItem HorizontalAlignment="Right" />
</StatusBar>

ググってみたところ、以下のURLにたどり着きました。

ブログスポット

これは本当にこれに対する唯一の解決策ですか、それとももっと簡単な方法がありますか?

4

4 に答える 4

36

ItemsPanelのデフォルトが でStatusBarあるという事実を利用できますDockPanel。デフォルトでは、最後のDockPanelアイテムで残りのスペースを埋めようとします。したがって、最後StatusBarItemに に追加するStatusBarと、残りのスペースが埋められます。これを利用するには、次のStatusBarItemsように簡単にネストできます。

<StatusBar Name="statusBar1" Height="23" HorizontalAlignment="Stretch" VerticalAlignment="Bottom">
  <StatusBarItem Content="Item 1"/>
  <StatusBarItem Content="Item 2" />
  <StatusBarItem HorizontalAlignment="Right">
    <StackPanel Orientation="Horizontal">
      <StatusBarItem  Content="Item 3"/>
      <StatusBarItem Content="Item 4"/>
      <ProgressBar Height="15" Width="50" IsIndeterminate="True" Margin="5,0"/>
    </StackPanel>
  </StatusBarItem>
</StatusBar>

HorizontalAlignment3 番目のStatusBarItemは に設定されてRightいるため、コンテンツは右揃えになることに注意してください。

もちろん、アイテム 3 とアイテム 4 を にする必要はありません。上で説明したやStatusBarItemsなど、他のコントロールにすることもできます。は、が 内にアイテムをラップするのと同様に、アイテムを にラップするコンテナです。ButtonsProgressBarStatusBarItemStatusBarComboBoxItemComboBox

を使用しない場合、 はそのStatusBar内容を自動的にラップするStatusBarItemsので、項目 1 と 2 は簡単にTextBoxes. 使用する主な理由は、デフォルトに依存するのではなく、手動で設定する3 番目のように、StatusBarItemsの動作を制御したい場合です。StatusBarItemStatusBarItemHorizontalAlignment

于 2013-03-02T17:13:33.983 に答える
23

前述のとおり、デフォルトのコンテナはDockPanel. そのため、必要な数の項目を に設定できますDockPanel.Dock="Right"fillアイテムが最後であることを確認してください。

<StatusBar>
    <StatusBarItem DockPanel.Dock="Right">
        <Slider Width="100" />
    </StatusBarItem>
    <StatusBarItem DockPanel.Dock="Right">
        <Label>Zoom: 100 %</Label>
    </StatusBarItem>
    <StatusBarItem>
        <TextBlock>Ready</TextBlock>
    </StatusBarItem>
</StatusBar>
于 2013-03-24T15:46:09.540 に答える
3

最後のアイテムがすべてのスペースを消費することを心配することなく、上記のソリューションと同じように設定LastChildFillfalseて使用することもできます。DockPanel.Dock=Right

<StatusBar>
  <StatusBar.ItemsPanel>
    <ItemsPanelTemplate>
      <DockPanel LastChildFill="False" />
    </ItemsPanelTemplate>
  </StatusBar.ItemsPanel>
</StatusBar>
于 2015-01-19T15:56:35.763 に答える