如何在XAML中将多个StatusBarItems对齐到右侧?

Pas*_*ber 14 c# xaml alignment

我的C#应用​​程序中有一个包含4个项目的StatusBar.我基本上想要将最后两个StatusBarItems浮动到右边.我已经通过设置它们来尝试它HorizontalAlignment="Right",但这只适用于最后一项.

<StatusBar Name="statusBar1" Height="23" HorizontalAlignment="Stretch" VerticalAlignment="Bottom">
    <StatusBarItem />
    <StatusBarItem />
    <StatusBarItem HorizontalAlignment="Right" />
    <StatusBarItem HorizontalAlignment="Right" />
</StatusBar>
Run Code Online (Sandbox Code Playgroud)

我开始谷歌搜索,我想出了以下内容:http: //kentb.blogspot.ch/2007/10/perfect-wpf-statusbar.html

这真的是唯一的解决方案吗?或者有更简单的方法吗?

Bri*_*n S 27

你可以采取的事实,即默认的优势ItemsPanelStatusBarDockPanel.的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>
Run Code Online (Sandbox Code Playgroud)

请注意,HorizontalAlignment第3个StatusBarItem的设置是Right为了使其内容对齐.

当然,你不必拥有第3项和第4项StatusBarItems,它们可以是其他控件,例如Buttons或者ProgressBar我已经在上面演示过.该StatusBarItem仅仅是包装在物品的容器StatusBar,类似于如何ComboBoxItem包装项目内ComboBox.

StatusBar将包裹它的内容在StatusBarItems自动,如果你不使用它们,所以项目1和2可以很容易地被TextBoxes.使用的主要原因StatusBarItems是,您希望控制StatusBarItem工作方式,例如在第3个手动StatusBarItem设置的位置HorizontalAlignment,而不是依赖于默认值.

  • 也尝试过..不幸的是只会导致以下结果:http://www.abload.de/img/02032013291y0h.png (2认同)

Mit*_*tch 19

如上所述,默认容器是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>
Run Code Online (Sandbox Code Playgroud)

  • 您的解决方案看起来比接受的答案更干净 (2认同)