본문 바로가기

프로그래밍 언어/WPF8

[C#] WPF - 특정 프로세스 Focus 여부 판단 방법 이 글은 VisualStudio 환경에서 WPF 개발 시 MainWindow 코드에서 특정 프로그램이 Focus 되었을 때 어떤 동작(MainWindow 색상 조절과 등)을 수행해야하는 경우, Win32 dll을 Import하지 않고 기본으로 제공되는 EventHandler를 사용하는 방법에 대한 설명이다. 첫 번째 : UIAutomationClient 참조 추가. VisualStudio(이 글에서 사용하는 버전은 VS2015) 에서 참조 → 참조 추가를 클릭한다. 어셈블리 → 프레임워크 → UIAutomationClient 포함한 4개항목 선택 → 확인 버튼을 클릭하여 참조 추가를 진행한다. 이후 아래 네임스페이스를 참조 추가해준다. Diagnostics는 Process ID 비교를 위해 사용되고, A.. 2023. 1. 9.
[C#] WPF - DataGrid의 ForeColor 변경 시 에러 방지 WPF에서 DataGrid를 사용하다 보면 특정 DataGridTextColumn에 Forground 또는 Background 색상을 설정해야 할 필요가 있다. Dynamic 하게 표시하기 위해서 열 단위로 생성하는 경우, Thread 내부에서 데이터 바인딩을 통해 설정한 Foreground 색상을 설정하고 실행해 보면 색 설정이 적용되지 않은 경우가 있는데, Foreground 또는 Background와 같은 특정 속성에 대해서는 Freeze()를 해줘야만 적용된다. 아래와 같이 DataTextColumn에서 Name 헤더의 글자색, Foreground를 상태에 따라 변경하고싶은 경우, Foreground에 대하여 ForeColor로 바인딩 한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 .. 2022. 10. 26.
[C#] Form에서 다른 Form으로 데이터 전송하는 방법 에러 메시지를 표시하거나, Yes/No와 같은 간단한 결과를 얻으려는 경우 MessageBox에서 해결할 수 있다. 하지만 특정 데이터를 하나의 Form에서 받은 후 다른 Form에 전달해야 하는 경우, MessageBox로는 불가능하다. 검색을 통해 여러가지 방법을 찾았지만, DataPassEventHandler를 사용하는 방법이 가장 직관적이고 명확한 방식이라 생각해 DataPassEventHandler를 사용하는 방법을 소개한다. DataPassEventHandler를 사용하는 방식은 아래와 같다. 데이터를 받을 Form(또는 xaml)을 부모, 데이터를 전송할 Form(또는 xaml)을 자식이라 하면 1. 부모 Form에서 자식 Form에 대한 DataPassEventHandler를 정의한다. 2.. 2022. 10. 25.
[C#] TreeView 상위 노드 체크시 하위 노드 연동 상위 노드가 체크된 경우 하위 노드들이 모두 일괄 체크되거나, 반대로 상위 노드가 체크 해제된 경우 하위 노드들이 모두 일괄 체크 해제되는 코드를 만들어보았다. 우선, TreeView에서 AfterCheck 이벤트 발생 시 동작하도록 설정하였다. 아래 코드를 보면 node의 Nodes를 확인(자식 노드)하여 체크 상태를 따라가도록 설정하는 것이다. 1 2 3 4 5 6 7 8 9 10 11 12 private void tv_AfterCheck(object sender, TreeViewEventArgs e) { // 상위 노드 체크/언체크시 하위 노드도 함께 체크/언체크 되도록 설정 var action = e.Action; var node = e.Node; var children = node.Nodes; .. 2022. 1. 7.