[WPF] 공공데이터 포털 API 이용 클라이언트 구현 Part 3

이미지
그룹핑 ListViewItem 그룹핑 할 수 있습니다. 먼저 CheckBox에 Checked 이벤트를 통해 그룹핑을 추가하고 RemoveChecked 이벤트를 통해 그룹핑을 제거 할 수 있도록 CheckBox를 선언 합니다. 1: <!-- Group CheckBox --> 2: <CheckBox Grid.Column="0" 3: Grid.Row="0" 4: Checked="AddGrouping" 5: Unchecked="RemoveGrouping">Group by Name</CheckBox> 그룹 스타일 선언 GroupStyle 속성에 ContainerStyle 속성을 이용해 Style을 지정 합니다. Expander 컨트롤을 이용해 아파트명과 그룹 아이템의 개수를 Expander Header에 표시 하도록 ControlTemlate를 선언 합니다. 1: <!-- Group Style --> 2: <ListView.GroupStyle> 3: <GroupStyle> 4: <GroupStyle.ContainerStyle> 5: <Style TargetType="{x:Type GroupItem}"> 6: <Setter Property="Margin" Value="0,0,0,5" /> 7: <Setter Property="Te...

MSDN WPF 샘플 따라하기 - ApplicationShutdown

ApplicationShutdown

WPF 응용프로그램 종료 시나리오에 대한 샘플 입니다.

종료 시나리오는:
  • 마지막 창을 닫을 경우 응용 프로그램 종료
  • 메인 창을 닫을 경우 응용 프로그램 종료
  • 명시적으로 Shutdown 메서드 호출을 통한 응용 프로그램 종료
아래 예제는 어플리케이션의 종료 방법을 리스트 박스의 아이템 선택에 따라 어플리케이션 종료를 설정 적용해 볼 수 있습니다.

설정 창 구성

1:  <Window x:Class="ApplicationShutdown.MainWindow"  
2:      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
3:      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
4:      xmlns:d="http://schemas.microsoft.com/expression/blend/2008"  
5:      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"  
6:      xmlns:local="clr-namespace:ApplicationShutdown"  
7:      mc:Ignorable="d"  
8:      Title="MainWindow" Height="350" Width="525" Loaded="MainWindow_Loaded">  
9:    <DockPanel>  
10:      <StackPanel DockPanel.Dock="Top" Orientation="Horizontal">  
11:        <Label HorizontalAlignment="Left">Shutdown Mode:</Label>  
12:        <ComboBox HorizontalAlignment="Left" Name="shutdownModelListBox" />  
13:      </StackPanel>  
14:      <StackPanel DockPanel.Dock="Top" Orientation="Horizontal">  
15:        <Label HorizontalAlignment="Left">Application Exit Code (for explicit shutdown):</Label>  
16:        <TextBox HorizontalAlignment="Left" Name="appExitCodeTextBox">0</TextBox>  
17:      </StackPanel>  
18:      <Button DockPanel.Dock="Top" Click="newWindowButton_Click">New Window</Button>  
19:      <Button DockPanel.Dock="Top" Click="explicitShutdownButton_Click">Shutdown Explicitly (passing Exit Code)</Button>  
20:      <Canvas />  
21:    </DockPanel>  
22:  </Window>  

메인 창 Load 이벤트

ListboxItem을 추가 하고, 아이템 변경 시 발생하는 이벤트를 초기화 합니다.

1:      private void MainWindow_Loaded(object sender, RoutedEventArgs e)  
2:      {  
3:        // UI 초기화  
4:        shutdownModelListBox.Items.Add("OnLastWindowClose");  
5:        shutdownModelListBox.Items.Add("OnExplicitShutdown");  
6:        shutdownModelListBox.Items.Add("OnMainWindowClose");  
7:        shutdownModelListBox.SelectedValue = "OnLastWindowClose";  
8:        shutdownModelListBox.SelectionChanged += ShutdownModelListBox_SelectionChanged;  
9:        // 마지막 창을 닫을 때 Application을 종료  
10:        Application.Current.ShutdownMode = ShutdownMode.OnLastWindowClose;  
11:      }  

Shutdown ListBox Item 선택 변경 이벤트

현재 Application의 ShutdownMode를 변경 합니다.

1:      private void ShutdownModelListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)  
2:      {  
3:        Application.Current.ShutdownMode =   
4:          (ShutdownMode)Enum.Parse(typeof(ShutdownMode), shutdownModelListBox.SelectedValue.ToString());  
5:      }  

explicitShutdownButton 클릭 이벤트

Shutdown 메서드를 호출해야만 종료가 가능하며, 종료 코드를 사용자 정의하여 반환이 가능합니다. 윈도우의 기본 닫기 버튼을 이용해도 프로세스에서 종료되지 않으니 유의해야 합니다.

1:      private void explicitShutdownButton_Click(object sender, RoutedEventArgs e)  
2:      {  
3:        var exitCode = 0;  
4:        int.TryParse(appExitCodeTextBox.Text, out exitCode);  
5:        Application.Current.Shutdown(exitCode);  
6:      }  

Closing, Closed 이벤트

Closing 이벤트는 창이 종료되기 직전에 발생하는 이벤트로 사용자에게 창을 닫기 전 확인하는 작업을 하기에 적당 합니다. Closed 이벤트는 창이 닫힌 후 발생하는 이벤트로 응용 프로그램이 종료 되기 전 처리해야 하는 부분을 작성합니다.

1:      private void ChidWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)  
2:      {     
3:        var result = MessageBox.Show("Allow Shutdown?", "Application Shutdown Sample",  
4:          MessageBoxButton.YesNo,  
5:          MessageBoxImage.Question);  
6:        // 메시지 박스 결과가 No 일 경우 종료를 취소 합니다.  
7:        e.Cancel = (result == MessageBoxResult.No);  
8:      }  

1:      private void ChildWindow_Closed(object sender, EventArgs e)  
2:      {  
3:        // 아무 작업 없음  
4:      }  

댓글

이 블로그의 인기 게시물

[C#] Task 완료 시 다른 Task를 자동으로 수행

[C#] 태스크(Task)가 완료될 때 까지 대기하여 결과를 얻는 방법

[C#] 명시적으로 Task 생성 및 실행