C#/WPF
-
WPF BitmapImage 에서 ArgumentExceptionC#/WPF 2019. 10. 14. 11:25
WPF에서 Canvas의 Background 등 ImageBrush를 사용 중 ArgumentException이 발생하면서 "값이 예상범위를 벗어났습니다." or "does not fall within the expected range" 라는 Exception을 발생할 때가 있습니다. 이는 ImageBrush만의 문제가 아니라 BitmapImage를 사용할 때 발생할 수 있습니다. (아래에 참조 링크) BitmapImage는 한 객체당 한 Image만 참조하는 것이 기대되어 있습니다. 그래서 ImageBrush의 ImageSource를 바꾼다던지 하는 방식으로 한 객체에 여러 Image를 할당하려 할 때 발생하게 됩니다. 해법은 그냥 ImageBrush나 ImageSource를 사용하는 해당 객체를 새로..
-
WPF 타이틀 바 바꾸기(Title Bar Custom)C#/WPF 2018. 4. 27. 11:30
WPF로 개발을 하다 보면 상단의 ㅡㅁX가 있는 타이틀 바의 스타일을 바꿔야 할 때가 있습니다. 저도 이와 관련해서 며칠 찾아보았지만, 주로 Mahapps.metro(링크)를 사용하고, 직접 다른분께서 만드신 내용은 많이 없더라구요. 우선은 기본적으로 Window의 Title Bar는 색을 바꾼 수 없습니다. 그래서 바꾸는 법으로 WindowChrome이 있지만, .NET Framework 4 이상에서 지원되고, .NET Framework 4.5 이상부터 기본으로 포함되기에 혹 낮은 버전의 .NET을 써야 한다면 사용하실 수 없습니다. 그리고 WindowChrom을 써도 원하는대로 안나오거나 마음에 들지 않을 때가 많더라구요 ㅡㅁX버튼이 안보인다던지 제가 WindowChrom에 대해서도 찾아 보았는데 좋..
-
WPF 최소화 최대화 종료 버튼 만들기C#/WPF 2018. 4. 27. 11:00
윈도우 프로그램들은 기본적으로 가지고 있는 ㅡㅁX 버튼이 있습니다. 이 버튼을 임의적으로 구현해야 할 때가 있습니다. (Custom Title Bar) 사실 기능을 구현하는 것보다 버튼을 그리는 것이 더 복잡..합니다. 먼저 기능을 구현하는 부분입니다. .cs 파일에 추가해 주시면 됩니다. 12345678910111213141516171819202122232425262728private void Maximize_Click(object sender, RoutedEventArgs e){ this.WindowState = (this.WindowState == WindowState.Normal) ? WindowState.Maximized : WindowState.Normal;} private void Close..
-
WPF WindowStyle None 최대화 시 작업 표시줄 보이게 하기C#/WPF 2018. 4. 26. 15:23
WPF에서 WindowStyle을 None으로 설정하고 Maximize를 하면 화면 전체를 가득 채워서 작업 표시줄까지 가리게 됩니다. 이럴 경우에는 MaxHeight를 통해 최대 크기를 제한해주면 작업 표시줄을 가리지 않게 됩니다. 하지만 사용자의 모니터가 여러대이면서 각 모니터의 해상도가 다를 경우에는 모니터마다 MaxHeight를 바꿔주어야 합니다. 먼저 모니터가 1개이거나 모든 모니터의 해상도가 같을 때 MaxHeight를 설정하는 법입니다. 123456public MainWindow(){ InitializeComponent(); MaxHeight = SystemParameters.WorkArea.Height;}Colored by Color Scriptercs 생성자 또는 Loaded 이벤트에서 ..
-
WPF System Menu 불러오기C#/WPF 2018. 4. 26. 11:30
윈도우의 상단 Title Bar를 우클릭 하면 아래와 같은 시스템 메뉴가 나오게 됩니다. 시스템 메뉴를 굳이 위 상단 Title Bar 클릭이 아닌 다른 이유로 불러야 할 때가 있습니다. (Custom Title Bar 등...) WPF 특정 Control을 우클릭 했을 떄 시스템 메뉴를 여는 법에 대해 써보겠습니다. 우선 MouseDown Event Handler가 필요합니다. 저는 Label을 눌렀을 때 뜨도록 하겠습니다. 1cs PreviewMouseDown 과 MouseDown의 차이는 없습니다. 그리고 DLL파일을 Import하야 하기 때문에 using을 씁니다. using System.Runtime.InteropServices; 다음 내용이 필요합니다. 1234567[DllImport("use..
-
WPF Drag, Drop이 되는 ListBoxC#/WPF 2018. 2. 27. 09:45
이전 포스트(2018/01/30 - [C#/WPF] - WPF 한 ListView(ListBox)에서 Drag Drop)에서 ListBox에 Drag & Drop이 가능하도록 해보았었습니다. 하지만 단일 Item 만 Drag & Drop이 가능했었던 점, Drop이 될 위치가 보이지 않는 점 등 굉장히 기초적인 내용이였습니다. 이제 위에 서술된 내용 + 자잘한 내용등을 수정하여 재사용이 가능한 사용자 정의 컨트롤을 만들었습니다. ※ ListBox 의 Item 내용은 유일(Unique)해야 합니다. (Remove 관련) ※ Item을 꼭 GGData형으로 할 이유는 없으며, GGData 내부 Item의 형을 바꾸셔도 되고,GGData형을 사용하지 않을 경우 cs파일에서 GGData를 원하는 형으로 바꾸시면..
-
WPF ListView(ListBox) 드래그 하는 중 스크롤C#/WPF 2018. 1. 31. 11:06
※이 글은 ListView or ListBox에서 Drag기능을 구현한 다음 사용 가능합니다. ListView나 ListBox 컨트롤(List 컨트롤)에서 Item을 드래그 하며 순서를 바꾸는 도중, 현재 보이는 Item이 아닌 스크롤을 통해 이동하여 위치시켜야 하는 경우가 있습니다. Drag를 통해 List 컨트롤의 현재 Vertical Scroll을 옮기는 방법입니다. 해당 List 컨트롤에 DragOver EventHandler를 추가해줍니다. 123456789101112131415161718private void MyList_DragOver(object sender, DragEventArgs e){ ListView listView = sender as ListView; ScrollViewer sc..
-
WPF 한 ListView(ListBox)에서 Drag DropC#/WPF 2018. 1. 30. 10:47
WPF에서 ListView or ListBox(이하 List 컨트롤)와 같은 List 컨트롤 들에서 Item을 Drag, Drop하는 일이 자주 있습니다. 그런데 한글 자료로는 별로 없고 해외 자료들은 두 List 컨트롤 간에 Drag Drop이 주를 이루더군요. 그래서 여러 자료들을 찾고, 참고하여 한 List 컨트롤 내에서 Drag Drop으로 순서 바꾸기를 구현했습니다. 2018.01.29 - 아직 Item 사이에 커서가 위치한 상태로 Drop을 하면 맨 아래로 Drop되는 문제가 있습니다. 우선 List컨트롤에 아래의 EventHandler들을 추가해주어야 합니다.PreviewMouseLeftButtonDownPreviewMouseMoveDrop 또한 AllowDrop 속성을 True로 바꿔주어야..