티스토리 뷰
안녕하세요~ 버닝워커 입니다.
이번에는 Local 컴퓨터의 이미지들을 보는 ImageViewer 프로그램을 한번 만들어 보려합니다.
소스는 굴러(?)다니는 PhotoGallery라는 소스를 토대로 만들려고 합니다.
우선 imgViewer.xaml 파일을 하나 생성합니다.
<Window x:Class="WpfApplicationTest.imgViewer"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="imgViewer" Height="300" Width="300" Loaded="Window_Loaded">
<Grid>
<TreeView x:Name="treeView" Grid.Row="1" Background="AliceBlue" >
<TreeViewItem x:Name="foldersItem" Header="Folders"/>
</TreeView>
</Grid>
</Window>
위의 코드와 같이 TreeView를 하나 만들고 imgViewer.xaml.cs 로 가봅시다.
public partial class imgViewer : Window
{
#region Properties
//폴더경로를 추가하지 않은 Node에 임시로 넣어두는 objcet
private object dummyNode = null;
#endregion Properties
#region Constructor
public imgViewer()
{
InitializeComponent();
}
#endregion Constructor
private void Window_Loaded(object sender, RoutedEventArgs e)
{
//window 로드시 우선 Directory.GetLogicalDrives()를 사용해서
//로컬 PC의 논리 드라이브 명을 불러와서 TreeView에 추가 했던
//foldersItem Node에 추가 합니다.
foreach (string item in Directory.GetLogicalDrives())
{
TreeViewItem TVitem = new TreeViewItem();
TVitem.Header = item;
//Tag에 논리 드라이브 명을 입력
TVitem.Tag = item;
//논리 드라이브명의 하위에 dummyNode를 넣어둡니다.
TVitem.Items.Add(dummyNode);
//해당 트리를 펼칠때 하위에 존재하는 폴더를 추가하기 위해 Event를 추가 합니다.
TVitem.Expanded += new RoutedEventHandler(folder_Expanded);
foldersItem.Items.Add(TVitem);
}
}
void folder_Expanded(object sender, RoutedEventArgs e)
{
//해당 트리를 확장 하였을때 일어나는 이벤트 입니다.
TreeViewItem TVitem = (TreeViewItem)sender;
//확장한 노드의 Items.Count가 1개이고 그 아이템이 dummyNode일때 하위
//Directorie를 추가해줍니다. (확장을 할때 마다 해당하는 폴더의 노드가 추가 되겠지욤)
if (TVitem.Items.Count == 1 && TVitem.Items[0] == dummyNode)
{
TVitem.Items.Clear();
try
{
foreach (string item in Directory.GetDirectories(TVitem.Tag.ToString()))
{
TreeViewItem subitem = new TreeViewItem();
subitem.Header = item.Substring(item.LastIndexOf("\\") + 1);
subitem.Tag = item;
subitem.Items.Add(dummyNode);
subitem.Expanded += new RoutedEventHandler(folder_Expanded);
TVitem.Items.Add(subitem);
}
}
catch (UnauthorizedAccessException)
{
System.Windows.Forms.MessageBox.Show("장치가 준비되지 않았습니다.");
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.ToString());
}
}
}
}
이제 빌드를 하고 실행해봅시다.
매우 썰렁한... Window가 뜰겁니다. 노드를 클릭하면 해당 경로의 폴더들이 노드에
추가되는 것을 확인 할 수 있습니다. 이 노드를 기준으로 해당하는 폴더의 jpg 혹은 bmp
파일들을 자동으로 인식하여 화면에 Image를 출력하는 방식의 Viewer를 만들겁니다.
기존의 Windows.Forms 와는 조금씩 틀린 부분이 보이는데요 차근차근 만들어 가면서
조금씩 알아 가보도록 하겠습니다.