반응형

WPF 45

[WPF] DataGrid 행 더블 클릭 시 Command 실행하기

WPF에서 MVVM 패턴을 사용하는 경우, DataGrid의 행을 더블 클릭할 때 특정 Command를 실행하고자 할 수 있습니다. 이 작업을 수행하기 위해서는 Interaction.Behaviors를 활용하는 것이 일반적입니다. 오늘은 DataGrid 행 더블 클릭에 Command를 연결하고 CommandParameter로 선택된 행의 아이템을 전달하는 방법을 살펴보겠습니다. 1단계: Behavior 클래스 생성 먼저, 행 더블 클릭 시 실행할 Behavior 클래스를 생성해야 합니다. 이 클래스는 System.Windows.Interactivity.Behavior를 상속받아야 합니다. 그리고 Command와 CommandParameter를 DependencyProperty로 선언하여, XAML에서 B..

프로그래밍/WPF 2023.11.03

[WPF] HelixToolkit.Wpf.SharpDX 사용하여 3D 공간에서 마우스 드래그로 선택 영역 그리기

3D 모델링 및 시각화 툴을 개발하다 보면 사용자가 마우스로 드래그하여 특정 영역을 선택하는 기능을 구현할 필요가 종종 있습니다. 이번 글에서는 WPF와 HelixToolkit.Wpf.SharpDX를 사용하여 3D 공간에서 마우스 드래그로 선택 영역을 그리는 방법에 대해 알아보겠습니다. 개요 사용자가 마우스 왼쪽 버튼을 클릭하고 드래그하면, 그림자 박스 형태로 선택 영역을 화면에 표시합니다. 이 기능은 3D 모델링 툴에서 객체를 선택하거나, 특정 영역에 대한 작업을 수행할 때 유용하게 사용됩니다. 준비 먼저, WPF 프로젝트를 생성하고, NuGet 패키지 관리자를 통해 HelixToolkit.Wpf.SharpDX를 설치합니다. 코드 구현 디자인 필드 정의 private Vector3 startDragPo..

프로그래밍/WPF 2023.10.30

[WPF] Slider 드래그 완료 시점에 값 업데이트하기

안녕하세요, 오늘은 WPF에서 Slider의 Value를 사용자가 드래그를 완료한 순간에만 업데이트하는 방법에 대해 이야기하려 합니다. 일반적으로 WPF에서는 사용자가 Slider를 드래그하는 동안 실시간으로 값을 업데이트하지만, 이 방법을 사용하면 드래그가 완료된 후에만 업데이트가 이루어집니다. 먼저, 어떤 문제를 해결하려는가? Slider를 사용하면 사용자는 원하는 값을 직접 조절할 수 있습니다. 이때 Slider의 Value를 어떤 속성에 바인딩하면, 사용자가 슬라이더를 드래그하면서 속성 값이 실시간으로 업데이트됩니다. 이런 실시간 업데이트가 문제가 될 수 있습니다. 왜냐하면 슬라이더를 움직이는 동안에도 바인딩된 속성의 값이 계속 변경되면서 원치 않는 연산이나 UI 업데이트가 발생할 수 있기 때문입..

프로그래밍/WPF 2023.07.26

[WPF] Data Binding에서 StringFormat 사용하기

WPF의 데이터 바인딩 기능은 UI의 속성을 데이터 소스에 직접 바인딩할 수 있게 해줍니다. 그리고 StringFormat을 사용하면 이러한 데이터를 원하는 형식으로 출력할 수 있습니다. 이번 글에서는 어떻게 StringFormat을 사용하는지, 그리고 다양한 표현 방법에 대해 알아보겠습니다. 기본 사용 방법 먼저 가장 기본적인 사용 방법은 다음과 같습니다. 이 경우, {Binding Path=YourProperty}가 사용되며 여기서 YourProperty는 바인딩하려는 속스의 프로퍼티 이름입니다. StringFormat 사용하기 그런데 경우에 따라서는 데이터를 특정한 형식으로 표현하고 싶을 수 있습니다. 이럴 때는 StringFormat을 사용합니다. 예를 들어, 소수점 아래 세 자리까지의 실수를 표..

프로그래밍/WPF 2023.07.25

[WPF] DataGrid DataGridTemplateColumn 사용시 Ctrl+C (복사하기) 기능

안녕하세요, 오늘은 WPF의 DataGrid에서 DataGridTemplateColumn을 사용하면서 Ctrl+C로 셀의 내용을 복사하는 방법에 대해 이야기하려고 합니다. 복사하는 기능은 기본적으로 제공되지만, DataGridTemplateColumn을 사용하면 기본 설정이 작동하지 않을 수 있습니다. 이럴 때에는 ClipboardContentBinding 속성을 사용하면 해결할 수 있습니다. ClipboardContentBinding 속성이란? WPF의 DataGrid 컨트롤에서는 ClipboardContentBinding이라는 속성을 통해 셀의 내용이 클립보드에 어떻게 복사되는지 제어할 수 있습니다. 기본적으로 각 DataGridColumn에는 이 속성이 있으며, 해당 열의 셀이 클립보드에 복사될 때..

프로그래밍/WPF 2023.05.22

[WPF] 여러 Enum 상태에 따라 선택적으로 UserControl 표시하기

WPF에서 사용자 인터페이스를 개발하다 보면, 여러 상황에 따라 다양한 UserControl을 동적으로 표시해야 할 때가 있습니다. 이런 경우, Enum 상태에 따라 UserControl을 선택적으로 표시하는 방법을 사용할 수 있습니다. 이 이번 포스팅에서는 DataTemplate 및 DataTemplateSelector를 사용하여 여러 Enum 상태에 따라 UserControl을 표시하는 방법을 알아봅니다. 1. Enum 정의 public enum Status { First, Second, Third } 2. 각 상태에 대한 UserControl 정의 예를 들어, FirstControl.xaml, SecondControl.xaml, ThirdControl.xaml 파일을 각각 생성하여 다음과 같이 각 ..

프로그래밍/WPF 2023.04.12

[WPF] DataGrid에서 SelectedItems를 ViewModel과 바인딩하는 방법

오늘은 WPF DataGrid에서 선택된 항목들(SelectedItems)을 ViewModel과 바인딩하는 방법에 대해 알아보겠습니다. WPF의 DataGrid는 강력한 기능을 제공하지만, 선택된 항목들을 ViewModel에 직접 바인딩하는 기능은 제공하지 않습니다. 그러나 Blend SDK의 Behavior 클래스를 활용하여 이 문제를 해결할 수 있습니다. 먼저, DataGridSelectedItemsBehavior라는 이름의 새 클래스를 생성하고, 이 클래스를 Behavior로 상속합니다. public class DataGridSelectedItemsBehavior : Behavior { // ... } 다음으로, SelectedItems라는 DependencyProperty를 정의합니다. 이 프로퍼..

프로그래밍/WPF 2023.03.27

[WPF] Converter를 이용한 Binding Image Source

일반적으로 Image 컨트롤에 Image의 Path를 string 형태로 바인딩하면 화면에 이미지가 나온다. 그러나 이렇게 되면 해당 이미지를 프로그램이 계속 점유하고 있게 된다. 간단한 예를 들어보자 한쪽에는 한 화면에 좌측은 이미지가 있고, 오른쪽은 ListView에 이미지들의 나온다고 하고, ListView에서 Image의 이름을 선택하면 좌측에 해당 이미지가 보여주는 프로그램이 있다고 하자. 일반적인 바인딩의 경우 아래와 같이 할것이다. 선택한 이미지를 ImagePath라는 string에 바인딩 처리하여 Display할 것이다. 그런데 사용자는 Delete key를 통해 ListView에 있는 이미지를 삭제하고, 실제 경로에 있는 파일까지 삭제한다고 하면 아래와 같은 예외가 튀어나올 것이다. 파일..

프로그래밍/WPF 2023.03.23

[오류해결] Brush - DependencyObject와 같은 스레드에서 DependencySource를 만들어야 합니다.

WPF에서 Json으로 직렬화와 역직렬화하여 화면에 디스플레이 하다가 UI Thread에선 문제가 없었는데, Task를 태워서 비동기 처리를 하려다 보니 아래와 같은 오류가 발생되었다. DependencyObject와 같은 스레드에서 DependencySource를 만들어야 합니다. 처음엔 이게 뭐야??? 하면서 내가 사용한 객체들에 대해 뒤져보게 되었다. 일단 DependencyObject가 같은 Thread에서 나와야 한다는것이 일단 Dispatcher를 이용하면 될것이라는 것은 명확했다. 하지만 어느 부분에서?? 라는 것이 문제였다. 워낙 많은 양의 데이터를 역직렬화하다보니 전체를 감싸기도 애매했다. 그래서 객체에 담긴 모든 데이터를 다 확인해보기 시작했다. 뭐 결론은 Brush다. https://..

프로그래밍/WPF 2022.12.21

[WPF] Close popup when mouse leave

Popup에서 StaysOpen을 False로 두면 해당 팝업 컨트롤에서 포커스를 잃으면 알아서 닫힌다. 근데 포커스를 잃을려면 마우스를 누르거나 다양한 방법으로 상호작용을 해야하는데 이것마저 해서는 안되는 경우가 종종있다. 나의 경우는 그냥 팝업 화면에서 마우스만 빠져나가도 팝업이 닫게 하고 싶었다. Behind Code로 작성하면 편하겠지만 MVVM 패턴으론 쉽게하기 어려우니 Behavior를 쓰기로 했다. 일단 Behavior Class를 만들어준다. class ClosePopupBehavior : Behavior { protected override void OnAttached() { AssociatedObject.Child.MouseLeave += Child_MouseLeave; } privat..

프로그래밍/WPF 2022.12.20
반응형