2013-03-02 3 views
11

C# 응용 프로그램에 4 개의 항목이있는 StatusBar가 있습니다. 기본적으로 마지막 두 StatusBarItem을 오른쪽으로 플로팅하고 싶습니다. 나는 그것들을 모두 HorizontalAlignment="Right"으로 설정하여 시도했지만, 그것은 마지막 항목에 대해서만 작동했습니다. 여러 StatusBarItem을 XAML에서 오른쪽으로 정렬하는 방법은 무엇입니까?

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

나는 인터넷 검색을 시작하고 난 다음 내놓았다 : http://kentb.blogspot.ch/2007/10/perfect-wpf-statusbar.html

이이 정말 유일한 해결책인가? 아니면 더 쉬운 방법이 있습니까?

답변

22

StatusBar의 기본값 ItemsPanelDockPanel입니다. DockPanel은 기본적으로 남은 공간을 마지막 항목으로 채 웁니다. 따라서 마지막으로 StatusBarItem을 추가하면 StatusBar에 나머지 공간이 채워집니다. 이 활용하려면, 당신은 단순히 둥지 같은 StatusBarItems 수 : 3 StatusBarItemHorizontalAlignment은 그것의 너무 Right로 설정되어 있는지

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

주 내용 오른쪽 정렬됩니다.

물론 항목 3과 항목 4가 StatusBarItems 일 필요는 없습니다. 위에서 설명한 것처럼 다른 컨트롤 (예 : Buttons 또는 ProgressBar) 일 수도 있습니다. StatusBarItem은과 비슷한 내용의과 비슷한 내용의 항목을 단순히 컨테이너로 묶은 것입니다.

StatusBar은 사용하지 않으면 StatusBarItems의 내용을 자동으로 줄이므로 항목 1과 2는 마찬가지로 쉽게 TextBoxes이 될 수 있습니다. StatusBarItems을 사용하는 주된 이유는 StatusBarItem의 작동 방식을 제어하려는 경우입니다. 기본값은 HorizontalAlignment을 수동으로 설정하는 세 번째 StatusBarItem과 같습니다.

+1

는 시도 너무 .. 그 불행하게도 http://www.abload.de/img/02032013291y0h.png –

+0

아, 죄송합니다. 지금은 Mac에있어 테스트 할 수 없습니다. 'Stretch'로 설정할 수있는'StatusBar'에'HorizontalContentAlignment'가 있습니까? 곧 내 PC로 돌아가서 테스트 해 보겠습니다. –

+1

np. 그리고 그래, 그래도 그 트릭도하지 않았다. –

10

기본 컨테이너는 DockPanel입니다. 따라서 DockPanel.Dock="Right"에 필요한만큼 항목을 설정할 수 있습니다. fill 항목이 마지막인지 확인하십시오.

<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

해결책이 허용 된 대답보다 깨끗합니다. – Ondra

+0

더 나은 대답을 한 다음 받아들입니다. –

0

당신은 모든 공간을 소비하는 마지막 항목에 대해 걱정할 필요없이, 또한 falseLastChildFill를 설정 한 다음 바로 위의 솔루션처럼 DockPanel.Dock=Right를 사용할 수 있습니다

<StatusBar> 
    <StatusBar.ItemsPanel> 
    <ItemsPanelTemplate> 
     <DockPanel LastChildFill="False" /> 
    </ItemsPanelTemplate> 
    </StatusBar.ItemsPanel> 
</StatusBar> 
관련 문제