Status Bar

Status Bar란?

Status Bar는 애플리케이션 창의 하단에 위치하는 UI 요소로, 현재 애플리케이션 상태, 진행 상황, 또는 컨텍스트 정보를 사용자에게 표시하는 데 사용됩니다. Status Bar는 대개 읽기 전용으로 작동하며, 사용자 작업에 따라 동적으로 업데이트됩니다.

Status Bar의 특징

위치

  • 대부분 창의 하단에 고정되어 있습니다.

목적

  • 애플리케이션의 현재 상태를 표시합니다.
  • 사용자 작업이나 시스템 이벤트의 피드백을 제공합니다.
  • 추가적인 컨텍스트 정보를 표시합니다(예: 마우스 좌표, 현재 페이지, 진행률).

구성 요소

  • 텍스트 블록: 상태 메시지 표시.
  • 아이콘: 네트워크 상태나 오류 알림 등 시각적 정보를 표시.
  • 프로그레스 바: 작업 진행 상황을 표시.

상호작용

  • 대개 읽기 전용이며, 사용자 상호작용은 제한적입니다.
  • 일부 애플리케이션에서는 Status Bar에 버튼이나 드롭다운 메뉴를 추가하기도 합니다.

Status Bar의 일반적인 사용 사례

텍스트 상태 메시지

  • “저장 중…”, “작업 완료”, “네트워크 연결 끊김” 등의 정보를 표시.

작업 진행 상황

  • 작업이 진행 중일 때, 진행률을 프로그레스 바로 시각화.

애플리케이션 상태

  • 현재 편집 중인 파일 이름, 라인 및 열 번호, 선택된 도구 등을 표시(예: 텍스트 편집기).

네트워크 상태

  • 클라이언트-서버 애플리케이션에서는 연결 상태를 표시.

사용자 피드백

  • 오류 발생 시 Status Bar에 메시지를 출력해 사용자에게 피드백 제공.

Status Bar의 구성 요소

TextBlock

  • 상태 메시지를 간단하게 표시합니다.
  • 예: “저장 완료”, “로딩 중…”
<StatusBar>
    <TextBlock>Ready</TextBlock>
</StatusBar>

Icon

  • 시각적으로 상태를 표시하기 위해 아이콘을 추가할 수 있습니다.
  • 예: 저장 상태, 경고 메시지 등.
<StatusBar>
    <TextBlock>Network:</TextBlock>
    <Image Source="network_connected.png" Width="16" Height="16" />
</StatusBar>

ProgressBar

  • 작업 진행 상황을 표시합니다.
  • 예: 파일 다운로드 진행률.
<StatusBar>
    <TextBlock>Loading...</TextBlock>
    <ProgressBar Width="100" Height="16" IsIndeterminate="True" />
</StatusBar>

다중 영역

  • Status Bar를 여러 영역으로 나눠 정보를 표시할 수 있습니다.
  • 예: 왼쪽에 상태 메시지, 오른쪽에 날짜와 시간.
<StatusBar>
    <StatusBar.ItemsPanel>
        <ItemsPanelTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="Auto" />
                </Grid.ColumnDefinitions>
            </Grid>
        </ItemsPanelTemplate>
    </StatusBar.ItemsPanel>
    <TextBlock Grid.Column="0">Ready</TextBlock>
    <TextBlock Grid.Column="1">12:00 PM</TextBlock>
</StatusBar>

Status Bar 사용 예제

Status Bar에 실시간 데이터 표시

실시간 데이터를 Status Bar에 표시하면 사용자에게 중요한 정보를 즉시 제공할 수 있습니다.

<StatusBar>
    <StatusBarItem>
        <TextBlock Text="Network Speed:" />
    </StatusBarItem>
    <StatusBarItem>
        <TextBlock Text="{Binding NetworkSpeed}" />
    </StatusBarItem>
</StatusBar>
// ViewModel에서 실시간 데이터 업데이트
public string NetworkSpeed
{
    get => _networkSpeed;
    set
    {
        _networkSpeed = value;
        OnPropertyChanged();
    }
}
// 네트워크 속도 업데이트 로직 (Timer로 반복)
private void UpdateNetworkSpeed()
{
    NetworkSpeed = $"{GetCurrentNetworkSpeed()} Mbps";
}

사용자 상호작용 Status Bar

Status Bar에 버튼이나 메뉴를 추가하여 사용자 상호작용을 유도합니다.

예제: 버튼을 통한 세부 정보 표시

<StatusBar>
    <StatusBarItem>
        <TextBlock Text="Error occurred." />
    </StatusBarItem>
    <StatusBarItem>
        <Button Content="Details" Click="ShowErrorDetails" />
    </StatusBarItem>
</StatusBar>
private void ShowErrorDetails(object sender, RoutedEventArgs e)
{
    MessageBox.Show("Here are the details of the error.");
}

다중 영역 Status Bar

여러 개의 영역을 나눠 정보를 그룹화하여 효율적으로 표시합니다.

예제: 영역별 정보 표시

<StatusBar>
    <StatusBarItem>
        <TextBlock Text="Ready" />
    </StatusBarItem>
    <StatusBarItem HorizontalAlignment="Right">
        <TextBlock Text="Logged in as: Admin" />
    </StatusBarItem>
    <StatusBarItem HorizontalAlignment="Right">
        <TextBlock Text="12:45 PM" />
    </StatusBarItem>
</StatusBar>

Status Bar와 애니메이션

애니메이션을 활용해 사용자 피드백을 제공하거나 진행 상태를 시각적으로 표시합니다.

예제: 로딩 애니메이션 추가

<StatusBar>
    <StatusBarItem>
        <TextBlock Text="Loading..." />
    </StatusBarItem>
    <StatusBarItem>
        <ProgressBar Width="100" Height="16" IsIndeterminate="True" />
    </StatusBarItem>
</StatusBar>

Status Bar와 알림 시스템 통합

Status Bar를 알림 시스템과 통합하여 사용자에게 중요한 이벤트를 알려줍니다.

예제: 알림 메시지 표시

<StatusBar>
    <StatusBarItem>
        <TextBlock Text="{Binding NotificationMessage}" />
    </StatusBarItem>
</StatusBar>
// 알림 메시지 업데이트
private void NotifyUser(string message)
{
    NotificationMessage = message;
    Task.Delay(5000).ContinueWith(_ => NotificationMessage = "Ready"); // 5초 후 기본 상태로 복원
}

확장 기능

사용자 정의 드롭다운 Status Bar

Status Bar에 드롭다운 메뉴를 추가해 복잡한 정보나 작업을 효율적으로 표시합니다.

예제: 작업 선택 드롭다운

<StatusBar>
    <StatusBarItem>
        <ComboBox Width="120" SelectedIndex="0">
            <ComboBoxItem Content="Task 1" />
            <ComboBoxItem Content="Task 2" />
            <ComboBoxItem Content="Task 3" />
        </ComboBox>
    </StatusBarItem>
</StatusBar>

Status Bar와 테마 통합

Status Bar의 색상과 스타일을 애플리케이션 테마와 동기화하여 UI 일관성을 유지합니다.

예제: MahApps.Metro와 테마 통합

<StatusBar Background="{DynamicResource MahApps.Brushes.Accent}">
    <StatusBarItem>
        <TextBlock Foreground="{DynamicResource MahApps.Brushes.AccentForeground}" Text="Ready" />
    </StatusBarItem>
</StatusBar>

사용자 정의 컨트롤 삽입

Status Bar에 사용자 정의 컨트롤(예: 그래프, 상태 시각화)을 삽입하여 정보를 더욱 풍부하게 제공합니다.

예제: CPU 사용량 그래프

<StatusBar>
    <StatusBarItem>
        <TextBlock Text="CPU Usage:" />
    </StatusBarItem>
    <StatusBarItem>
        <ProgressBar Width="100" Height="16" Value="{Binding CpuUsage}" />
    </StatusBarItem>
</StatusBar>

Status Bar와 국제화(I18N)

Status Bar에 표시되는 메시지를 다국어 지원하도록 설정합니다.

예제: 다국어 메시지 지원

public string StatusMessage => Resources.StatusReady; // 리소스 파일에서 로드
<StatusBar>
    <StatusBarItem>
        <TextBlock Text="{Binding StatusMessage}" />
    </StatusBarItem>
</StatusBar>