2013-03-02 11 views
11

C# uygulamamda 4 öğe içeren bir Durum Çubuğum var. Temel olarak son iki StatusBarItems'i sağa kaydırmak istiyorum. Her ikisini de HorizontalAlignment="Right" ile ayarlayarak denedim, ancak bu sadece son öğe için çalışıyordu. Birden çok StatusBarItems'i XAML'de sağ tarafa nasıl hizalarsınız?

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

Ben googling başladı ve şu geldi: http://kentb.blogspot.ch/2007/10/perfect-wpf-statusbar.html

Bunun için bu gerçekten tek çözüm var mı? Ya da daha kolay bir yolu var mı?

cevap

22

StatusBar için ItemsPanel varsayılanı DockPanel olanağından yararlanabilirsiniz. DockPanel, varsayılan olarak kalan alanı son öğe ile doldurmaya çalışacaktır. Yani StatusBar'a eklediğiniz son StatusBarItem alanın kalanını dolduracaktır. Bundan yararlanmak için tek yapmanız gereken yuva böyle StatusBarItems edebilirsiniz: 3 StatusBarItem ait HorizontalAlignment öyle ki Right ayarlanmış olduğunu

<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> 

Not içeriğin doğru hizalanmış olacaktır.

Elbette, Öğe 3 ve Öğe 4'ün StatusBarItems olması gerekmez, bunlar da yukarıda gösterdiğim gibi Buttons veya ProgressBar gibi başka denetimler olabilir. StatusBarItem,öğelerinin bir ComboBox ürününün içindeki sargılarına benzer şekilde StatusBar öğelerinde bulunan bir kapsayıcıdır.

StatusBar, StatusBarItems içeriklerini otomatik olarak kullanmazsanız, bunları otomatik olarak sardığında, öğe 1 ve 2 de kolayca TextBoxes olabilir. StatusBarItems'u kullanmanın birincil nedeni, StatusBarItem öğesinin nasıl çalıştığını, 3. StatusBarItem örneğinde olduğu gibi, varsayılan değere güvenmek yerine, HorizontalAlignment öğesinin nasıl ayarlandığını denetlemek istediğiniz durumdadır. Belirtildiği gibi, varsayılan kapsayıcı DockPanel'dur.

+1

çalıştı bu da .. maalesef sadece aşağıdaki sonuca yol açar: http://www.abload.de/img/02032013291y0h.png –

+0

Ah, üzgünüm, şu an bir macdayım, bu yüzden bunu test edemiyorum. 'Stretch' için ayarlayabileceğiniz' StatusBar' üzerinde 'HorizontalContentAlignment' var mı? Yakında bilgisayarıma geri dönüp test edeceğim. –

+1

np. ve evet, var, ama bu da hile değildi. –

10

Bu nedenle, DockPanel.Dock="Right" için gereken sayıda öğe ayarlayabilirsiniz. Sadece fill öğesinin sonlandığından emin olun.

<StatusBar DockPanel.Dock="Bottom"> 
    <StatusBarItem DockPanel.Dock="Right"> 
     <Slider Width="100" /> 
    </StatusBarItem> 
    <StatusBarItem DockPanel.Dock="Right"> 
     <Label>Zoom: 100 %</Label> 
    </StatusBarItem> 
    <StatusBarItem> 
     <TextBlock>Ready</TextBlock> 
    </StatusBarItem> 
</StatusBar> 
+1

Çözümünüz kabul edilen yanıttan daha temiz görünüyor – Ondra

+0

daha iyi bir cevap daha sonra kabul edilen bir cevap –

0

Sen tüm alanı tüketen son öğe hakkında endişe etmeden, aynı zamanda false için LastChildFill ayarlayın ve sonra hemen üstünde çözümü gibi DockPanel.Dock=Right kullanabilirsiniz:

<StatusBar> 
    <StatusBar.ItemsPanel> 
    <ItemsPanelTemplate> 
     <DockPanel LastChildFill="False" /> 
    </ItemsPanelTemplate> 
    </StatusBar.ItemsPanel> 
</StatusBar> 
İlgili konular