반응형

WPF 47

[WPF] TabControl Header에 Close Button 구현 MVVM 패턴

WPF 에서 TabControl을 사용하다보면 Tab을 추가 및 삭제 처리를 해야하는 경우가 많다. Main Content에 쓰이는 TabControl에는 대부분 Tab Header에 닫기 버튼이 존재 하는경우가 다수 있다. 기본 TabControl에는 존재 하지 않으니 MVVM 패턴을 이용하여 이를 구현하는 방법에 대해 알아보도록 하자. 일단 기본적으로 ItemsSource에 들어갈 기본 객체를 선언해보자. public interface ITab { string Header { get; set; } ICommand CloseCommand { get; } event EventHandler CloseEvent; object DataContext { get; set; } } public class Tab :..

프로그래밍/WPF 2022.09.21

[WPF] Image Resource 등록 및 사용

이번에는 이미지 리소스를 등록 및 사용하는 방법에 대해 알아보도록 하겠다. 1. 프로젝트 파일에서 Properties > Resources.resx 창을 연다. 2. 이미지를 선택한다. 3. 원하는 이미지들을 드레그하여 추가한다. 4. 추가하였다면 Resources 폴더가 프로젝트 내에 생겼으며, 추가한 이미지들이 Resources폴더 내에 있을 것이다. 5. 솔루션 탐색기에서 Resources 내의 추가한 이미지 리소스를 오른쪽 버튼을 클릭하여 속성 화면으로 들어간다. 6. 빌드 작업을 반드시 Resource로 추가한다. 만약 Resource로 변경하지 않고 사용한다면 프로그램을 실행시켰을때 해당 이미지가 표시되지 않는다. 7. 실제 사용법

프로그래밍/WPF 2022.09.16

[WPF] 외부 Font 적용하기 - Roboto

기본 폰트만 사용하다 외부 폰트를 사용해야할 때가 있다. 무료 폰트인 Roboto 폰트를 예를 들어보겠다. 일단 Roboto 폰트를 Google에서 다운받는다. 다운받은 Font를 프로젝트에 아래와 같이 넣는다. App.xaml 을 연다. 아래와 같이 추가해준다. applicaton:,,,/Fonts/#Roboto applicaton:,,,/Fonts/#Roboto Black applicaton:,,,/Fonts/#Roboto Condensed applicaton:,,,/Fonts/#Roboto Condensed Light applicaton:,,,/Fonts/#Roboto Light applicaton:,,,/Fonts/#Roboto Medium applicaton:,,,/Fonts/#Roboto Th..

프로그래밍/WPF 2022.09.08

[WPF] MouseWheel Delta Binding

InputBinding으로 보통 마우스 클릭 위주로 바인딩은 쉽다. 하지만 MouseWheel의 Up Down의 경우 MVVM 으로 바인딩하려면 다른방법을 써야한다. Behavior를 이용하는 방법인데 이는 아래와 같다. 일단 MouseWheel의 Argument를 가져오기 위해 어떤 클래스를 상속해야하는지 확인해보자. https://docs.microsoft.com/ko-kr/dotnet/api/system.windows.uielement.mousewheel?view=windowsdesktop-6.0 UIElement.MouseWheel 이벤트 (System.Windows) 마우스 포인터가 이 요소 위에 있는 동안 사용자가 마우스 휠을 굴리면 발생합니다. docs.microsoft.com 위와 같이 M..

프로그래밍/WPF 2022.08.22

[WPF] Usercontrol 사용 시, 디자이너 Exception 문제

Usercontrol을 이용하여 화면을 구성할때, Designer에 오류가 뜨면서 화면을 못볼때가 있다. 이유는 디자이너가 Usercontrol을 할때 생성자를 들어가서 작업을 해서 생기는 문제라나 뭐라나.. 여튼 디자이너모드일 경우 생성자 처리를 안해주면된다. UserControl 생성자에 InitializeComponent위에 아래와 같은 코드를 집어넣어주면된다. if (DesignerProperties.GetIsInDesignMode(this)) return;

프로그래밍/WPF 2022.08.04

[WPF] TabControl header Content Binding

TabControl에 ItemsSource을 바인딩처리하여 MVVM 패턴을 적용할때, content는 바인딩하기는 쉬운데 스타일은 그대로 두고 Header의 이름만 바인딩 시키고 싶을 수 있다. 방법은 아래와 같다. public class TabViewModel { public string Header { get; set; } public object DataContext { get; set; } } public MainWindowViewModel() { Tab = new ObservableCollection(); Tab.Add(new TabViewModel { Header = "Test 1", DataContent = new ViewModel() }); Tab.Add(new TabViewModel { ..

프로그래밍/WPF 2022.08.03

[WPF] MouseBinding KeyBinding Binding

WPF 를 사용하다보면 마우스나 키보드를 이용하여 상호작용을 해야할 때가 있다. 이럴때 컨트롤에 InputBindings을 이용하여 MVVM으로 바인딩하는 방법이 있다. MouseBinding 할때 Gesture를 이용해도 되고, MouseAction을 사용해도 된다. 보통은 저렇게 쓸때 자동완성기능에 없는데 MouseBinding의 경우 아래의 URL가서 MouseAction 관련 Enum을 확인하면된다. https://docs.microsoft.com/ko-kr/dotnet/api/system.windows.input.mousebinding?view=windowsdesktop-6.0 MouseBinding 클래스 (System.Windows.Input) MouseGesture를 RoutedComman..

프로그래밍/WPF 2022.08.03

[WPF] TreeView MVVM IsSelected & IsExpanded Binding

일단 TreeView의 사용법을 한번 알아보자. 위와 같이 xaml을 작성한다면 아래와 같이 나온다. 우리가 여기서 중점적으로 봐야하는것은 ComboBox에서 ComboBoxItem 마냥 TreeViewItem이라는 컨트롤이다. https://docs.microsoft.com/ko-kr/dotnet/api/system.windows.controls.treeviewitem?view=windowsdesktop-6.0 TreeViewItem 클래스 (System.Windows.Controls) TreeView 컨트롤에 선택 가능한 항목을 구현합니다. docs.microsoft.com TreeViewItem 을 MS Docs에서 확인해보면 속성으로 IsExpanded, IsSelected, IsSelection..

프로그래밍/WPF 2022.08.03
반응형