티스토리 뷰

Development/WPF

WPF imageViewer 만들기(1)

알 수 없는 사용자 2008. 8. 12. 17:01
반응형

안녕하세요~ 버닝워커 입니다.

이번에는 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 와는 조금씩 틀린 부분이 보이는데요 차근차근 만들어 가면서

조금씩 알아 가보도록 하겠습니다.





반응형
댓글