본문 바로가기

WPF18

WPF TreeViewItem Font 스타일 변경 방법 WPF 에서 TreeViewItem 글꼴 을 굵게 표시 하려면 XAML 에서 Style를 사용할 수 있습니다 . 방법은 다음과 같습니다 .​굵은 글꼴 스타일 적용​TreeViewItem Style를 정의하고 Setter 를 사용 하여 FontWeight 속성에 Bold를 설정할 수 있습니다 . 글꼴을 동적으로 굵게 만들기특정 조건 ( 예 : TreeViewItem이 선택된 경우 )에서만 글꼴을 굵게 표시 하려면 Trigger를 사용할 수 있습니다 .트리거를 사용한 예 : .. 2025. 4. 23.
WPF MVVM에서 Window Close 호출 방법 WPF MVVM에서 Window를 닫는 방법은 MVVM 패턴을 유지하면서 ViewModel에서 닫기 동작을 제어하는 방식으로 구현할 수 있습니다. 아래는 일반적인 접근 방법입니다:1. Action을 활용한 Window 닫기ViewModel에서 Action을 정의하고, View에서 이를 설정한 후 ViewModel에서 호출하는 방식입니다.ViewModelpublic Action CloseAction { get; set; }public ICommand CloseCommand { get; }public ViewModel(){ CloseCommand = new RelayCommand(ExecuteClose);}private void ExecuteClose(){ CloseAction?.Invoke();.. 2025. 4. 23.
DialogService 이용하는 방법 DialogService를 이용하면 MVVM 패턴에서 ViewModel과 View 간의 의존성을 줄이면서도 깔끔하게 MessageBox와 같은 다이얼로그를 처리할 수 있습니다. 아래는 DialogService를 구현하고 사용하는 예입니다:1. DialogService 인터페이스 정의먼저, 다이얼로그 동작을 추상화하는 인터페이스를 정의합니다.public interface IDialogService{ void ShowMessage(string message, string title);}2. DialogService 구현인터페이스를 실제로 구현하여 MessageBox를 호출하는 클래스를 작성합니다.using System.Windows;public class DialogService : IDialogSer.. 2025. 4. 23.
WPF MVVM 패턴을 이용한 프로그램에서 Messagebox를 실행할 경우 호출 스택에서 throw 발생하는 경우 WPF MVVM 패턴에서 Event 함수 내에서 MessageBox를 실행하는 중 호출 스택에서 오류가 발생한 이유는 보통 UI 스레드와 관련이 있을 가능성이 높습니다. MVVM 패턴에서는 데이터와 UI를 분리하여 ViewModel에서 UI 요소를 직접 제어하지 않도록 설계되었습니다. 그러나 MessageBox는 UI 요소를 직접 생성하기 때문에 문제가 발생할 수 있습니다. 주요 원인으로는 다음과 같은 경우를 고려할 수 있습니다: 1. UI 스레드 접근 문제: Event 함수가 비동기 작업(예: Task.Run() 또는 다른 비동기 메서드) 내에서 실행되고 있다면, MessageBox를 호출할 때 UI 스레드가 아닌 다른 스레드에서 접근하려고 해서 오류가 발생할 수 있습니다. 이 경우 Dispatcher.. 2025. 4. 23.
WPF Group에서 Category 또는 Group별로 표시 하는 방법 WPF DataGrid에서 그룹별로 데이터를 표시하려면 CollectionViewSource를 사용하여 데이터를 그룹화할 수 있습니다. GroupStyle을 적용하면 그룹별 헤더를 만들 수도 있습니다. 1. CollectionViewSource를 사용한 데이터 그룹화먼저, CollectionViewSource를 활용하여 데이터를 그룹화합니다. 위 코드에서 PropertyGroupDescription을 사용하여 "Category" 속성을 기준으로 그룹화합니다.2. DataGrid에서 그룹별 표시하기이제 DataGrid에 ItemsSource를 CollectionViewSource로 설정하고 GroupStyle을 사용하여 헤더를 표시할 수 있습니.. 2025. 4. 23.
WPF MVVM TextBlock Foreground Binding WPF MVVM으로 View에 TextBlock을 Model에서 글자 색을 변경하기 위해서 Binding을 해서 사용할 수 있다. TextBlock의 Foreground는 Color가 아니라 Brush를 사용한다. 아래 예제는 CheckBox를 값이 변경 될 때 TextBlock의 Text의 내용과 Color가 변경 되게 하는 예제이다. Change Text Color 위와 같이 CheckBox를 만들어 bChecked = True이면 아래 TextBox의 checkStatus의 글자와 색상을 변경하도록 하려고 한다. public string checkStatus { get; set; } = "Selected"; public System.Windows.Media.Brush checkBrush { get;.. 2023. 6. 16.
WPF MVVM Window Close Action 처리 WPF MVVM으로 Window View와 Model 분리가 되어 있을 때 OK, Cancel 버튼을 눌러 Window를 닫는 방법이다. 간단하게 Close Action을 이용해서 닫을 수도 있는데 DialogResult를 받아서 처리를 할 때는 아래와 같이 처리해서 사용을 했다. https://learn.microsoft.com/en-us/dotnet/api/system.action-1?view=net-7.0 Action Delegate (System) Encapsulates a method that has a single parameter and does not return a value. learn.microsoft.com 다른 방법도 많을 것이다. 아래 예제는 System에서 제공하는 delega.. 2023. 6. 15.
C# UI Thread 에러 발생할 경우 C#에서 UI Thread 오류가 발생할 경우 아래와 같이 하나의 UI가 끝날 때까지 DoEvents() 함수를 호출하고 일정 시간이 지난 후에 UI 변경을 하도록 처리한다. for (int i = 0; i < 10; i++) { System.Windows.Forms.Application.DoEvents(); System.Threading.Thread.Sleep(1); } Tree의 Popup 메뉴로 창을 띄우는 코드를 하는데 Tree가 선택되어 Expand 되는 도중에 ShowDialog가 호출되어 UI Thread 오류가 발생했다. 그래서 Expand가 끝나는 시간까지 DoEvents 함수를 호출하게 한 후에 ShowDialog가 호출되니 오류가 발생하지 않았다. 2023. 2. 13.
WinForm안에 있는 WFP 창에서 owner를 지정하는 방법 WFP에서 Owner를 지정할 아래와 같이 사용할 수 있다. Owner = Application.Current.MainWindow; 그런데 WinForm안에 WPF를 이용할 때 WPF의 Dialog Owner를 기존과 같은 방식으로하면 Current가 null 에러가 발생한다. WinForm에서부터 Window Handle을 넘겨 받아 사용할 수도 있지만 아래와 같이 Process에서 Handle을 받아서 처리를 할 수도 있다. WPFTestView dlg = new WPFTestView(); System.IntPtr iMainHandle = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle; System.Windows.Interop.Win.. 2023. 2. 8.