wpf 10

WPF Gird panel 사용법

wpf에선 Layout 객체에 Canvas, StackPanel, WrapPanel, Grid 등이 있습니다. 그중 Grid 컨트롤에 관해 알아보겠습니다. 1.Grid.RowDefinitions Grid의 Row에대한 개수, 높이, 넓이등 로우값에 대한 세팅하는 태그입니다. RowDefinitnions태그 하나당 하나의 Row가 증가하는 속성을 가졌습니다. 2.ColumnDefinitions Grid의 Column에 대한 개수, 높이, 넓이등 컬럼 값에 대한 세팅을 하는 태그입니다. 마찬가지로 ColumnDefinitions 하나당 하나의 Column이 증가하는 속성을 가졌습니다. 3.Grid.Column Grid 컨트롤안에 Definitions를 지정한 만큼의 컬럼이 생기는데 해당 위치의 인덱스를 지정..

c# 2023.03.23

WPF DataTemplate과 ControlTemplate ItemsPanelTemplate

1.DataTemplate: DataTemplate은 데이터 개체의 시각적 표현을 정의하는 데 사용되는 템플릿입니다.목록이나 그리드에 항목 모음을 표시하는 것과 같이 특정 형식으로 데이터를 표시하는 데 사용됩니다. DataTemplate은 일반적으로 ListBox 또는 ListView와 같은 ItemsControl과 함께 사용되어 컨트롤의 각 항목 모양을 정의합니다. 2.ControlTemplate: ControlTemplate은 컨트롤의 모양과 동작을 정의하는 데 사용됩니다. 레이아웃, 테두리, 배경 및 기타 시각적 요소와 같은 컨트롤의 구조 및 시각적 모양을 정의합니다. ControlTemplate은 Button 또는 CheckBox와 같이 Control에서 파생되는 컨트롤과 함께 사용됩니다. 3.I..

c# 2023.03.21

WPF static Resource 와 dynamic Resource의 차이점

리소스를 설정해줍니다. 리소스 설정 wpf 의 리소스는 객체에 대한 값을 지정하여 재사용, 사용하기 위해서 사용합니다. 1.Static Resource 컴파일 타임에 로드됩니다. 처음 참조해 설정한 값이 변경 될일이 없는 경우 사용합니다. StaticResource를 통해 정적으로 등록합니다. 2.Dynamic Resource 런타임에 로드됩니다. 변경이 일어날때 사용합니다. 참조된 리소스가 즉시 사용 되지 않을 경우 사용합니다. 리소스가 변경될 때마다 다시 참조하여 가져오기 때문에 정적 리소스보다 성능의 저하가 있을 수 있습니다. DynamicResource를 통해 동적으로 등록합니다. 아래 코드를 추가하여 동적리소스에 해당 설정 정보가 바인딩 되게 해줍니다. 동적리소스 변경 로직 RadialGradi..

c# 2023.03.12

C# wpf Dispatcher DispatcherObjcet사용법 및 정의

WPF의 모든 UI관련 작업은 Main Thread가 수행합니다. 처음 시작할 때 있는 [STAThread]어트리뷰트가 위 내용에 해당 합니다. 여기서 STA 란 하나의 객체는 하나의 Thread에서만 엑세스할수 있도록하는 규칙과 제한입니다. 이때 WPF의 메인 Thread는 직접적으로 다른 Thread에 간섭을 받을수 없습니다. 즉 한 Thread에 생성된 컨트롤들은 그 Thread에서만 값을 변경 할 수 있습니다 해당 ui에 대한 쓰레드를 관리하는게 Dispatcher라는 큐 관리자이며 만약 해당 Dispatcher의 작업이 종료 되지 않았는데 ui를 변경하거나 조작하려 하면 에러가 발생하게 됩니다. 이를 방지하기 위해 사용하는것이 Dispatcher,DispatcherObject입니다. Dispat..

c# 2023.03.08

c# image to byte 이미지 바이트로 전환, 이미지 압축 하는 법

이미지를 바이트로 전환하여 압축하는 방법입니다. EncoderParameter클래스를 사용하여 압축의 퀄리티를 지정 할 수 있습니다. 0L과 가까울수록 이미지가 더 압축되어 깨짐현상이 있을 수 있습니다. 아래는 이미지를 선택하여 압축을 한 복사본을 만드는 예제 코드입니다. public FrmImagecs() { InitializeComponent(); OpenFileDialog dlg = new OpenFileDialog(); if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) { dlg.Filter = "jpg files (*.jpg)|*.jpg|jpeg files (*.jpeg)|*.jpeg|bmp files (*.bmp)|*.bmp|gif ..

c# 2023.02.27

c# 보조 키 이벤트 , 컨트롤 키 추가 이벤트 넣는 법

C# 이벤트를 만들다 보면 ctrl+마우스클릭 , Alt+드래그 등 보조키를 넣어야하는 이벤트가 필요한 경우가 있습니다. 이를 넣는 방법은 매우 간단합니다. 바로 아래와 같은 ModifierKeys를 사용하면됩니다. System.Windows.Forms.Control.ModifierKeys 예제 코드를 보겠습니다. //xaml public partial class Window2 : Window { public Window2() { InitializeComponent(); } private void Button_Click(object sender, RoutedEventArgs e) { // ModifierKeys를 통한 보조키 이벤트 활용 if (System.Windows.Forms.Control.Modi..

c# 2023.02.20

wpf MVVM Commandparameter 여러 개 파라미터 받기

wpf의 MVVM패턴 사용시 commandparameter의 값을 여러개를 받을때 사용 할 수 있는 코드입니다. -소스는 저번에 사용한 ICommand활성화 비활성화를 가져다 썻습니다. 1.컨버터 코드 생성 //컨버터 class Converter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { return values.Clone(); } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) { throw new ..

c# 2023.01.30

wpf MVVM ICommand 버튼 비활성화 활성화

wpf의 mvvm 패턴을 활용한 버튼 활성화 비활성화 로직을 만들어 보겠습니다. 우선 MVVM패턴이기 때문에 view viewmodel 로 구분하겠습니다. view viewModel using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Text; namespace WpfApp1 { class MainVM { //데이터가 들어갈 생성자 public ObservableCollection MainList { get; set; } = new ObservableCollection(); //버튼 command 바인딩 객체 public Relaycommand ButtonCommand {get; ..

c# 2023.01.26

C# 오류 'System.Windows.ResourceDictionary' 형식의 개체를 만들 수 없습니다. 원인 분석

윈도우에서 KB5021233 , KB5020872에 대한 보안 업데이트를 한 뒤로 System.Windows.Markup.XamlParseException: ''System.Windows.ResourceDictionary' 형식의 개체를 만들 수 없습니다. CreateInstance에 실패했으며 이는 'System.Windows.ResourceDictionary'에 대한 공용 기본 생성자가 없기 때문일 수 있습니다. 1 줄 200 위치의 개체 'System.Windows.Documents.FixedPage'에서 오류가 발생했습니다.' 위와 같은 오류가 뜨기 시작 했습니다. 아래는 해당 오류를 분석한 내용입니다. 에러가 나는 로직은 wpf의 flowdocument라는 형식을 xps문서로 변경한뒤 해당 xp..

c# 2023.01.18

WPF 디자인 패턴 mvvm패턴 viewmodel? view?

MVVM 패턴은 VIEW VIEWMODEL MODEL로 구분이 되어있는 디자인 패턴입니다. 1.View view는 ui에 관한 로직을 포함합니다. 즉 사용자가 화면에서 보는 것들에 관한 로직만을 담는것을 원칙으로 합니다. wpf에서는 initializecomponent메서드를 호출하는 생성자만 호출하는 것이 이상적으로는 바람직합니다. 단 코드비하인드에는 xaml에서 표현하기 어렵거나 view모델에서 바인딩하는것을 구현하기 어렵거나 비효율적인 ui에 관한 로직을 포함 합니다. view는 datacontext를 통해 view model을 참조합니다. 2.View model 뷰모델은 프리젠 테이션 로직을 포함 합니다. view에 대한 직접적인 참조를 가지고 있으면 안됩니다. view가 바인드 할수 있는 프라퍼..

c# 2023.01.14