1월, 2019의 게시물 표시

[WPF] 공공데이터 포털 API 이용 클라이언트 구현 Part 3

이미지
그룹핑 ListViewItem 그룹핑 할 수 있습니다. 먼저 CheckBox에 Checked 이벤트를 통해 그룹핑을 추가하고 RemoveChecked 이벤트를 통해 그룹핑을 제거 할 수 있도록 CheckBox를 선언 합니다. 1: <!-- Group CheckBox --> 2: <CheckBox Grid.Column="0" 3: Grid.Row="0" 4: Checked="AddGrouping" 5: Unchecked="RemoveGrouping">Group by Name</CheckBox> 그룹 스타일 선언 GroupStyle 속성에 ContainerStyle 속성을 이용해 Style을 지정 합니다. Expander 컨트롤을 이용해 아파트명과 그룹 아이템의 개수를 Expander Header에 표시 하도록 ControlTemlate를 선언 합니다. 1: <!-- Group Style --> 2: <ListView.GroupStyle> 3: <GroupStyle> 4: <GroupStyle.ContainerStyle> 5: <Style TargetType="{x:Type GroupItem}"> 6: <Setter Property="Margin" Value="0,0,0,5" /> 7: <Setter Property="Te...

WPF Resources

이미지
Binary Resources 이진 리소스는 세 가지 방법으로 패키지화 할 수 있습니다. 어셈블리 내부에 포함 컴파일 할 때 응용 프로그램에 알려진 느슨한 파일 컴파일 할 때 응용 프로그램에 알려지지 않은 느슨한 파일 Defining Binary Resources  이진 리소스를 정의하는 일반적인 절차는 파일을 Visual Studio 프로젝트에 추가하고 그림과 같이 img1.jpg라는 이미지에 대해 속성 표에서 적절한 빌드 동작을 선택하는 것입니다. Visual Studio는 WPF 응용 프로그램에 대한 몇 가지 빌드 동작을 지원하며이 중 두 가지는 이진 리소스와 관련이 있습니다. Resource - 리소스를 어셈블리 (또는 문화권 별 위성 어셈블리)에 포함합니다. Content- 리소스를 느슨한 파일로 유지하지만 파일의 존재 및 상대 위치를 기록하는 어셈블리 (AssemblyAssociatedContentFile)에 사용자 지정 특성을 추가합니다. Accessing Binary Resources WPF는 코드 또는 XAML에서 유니폼 리소스 식별자로 액세스 할 수있는 메커니즘을 제공합니다 (URI). XAML의 URI 문자열에 대한 기본 옵션이 요약되어 있습니다. 이러한 옵션 중 일부는 부분 신뢰 응용 프로그램에서 사용할 수있는 것은 아닙니다. If the URI Is... The Resource Is... logo.jpg 현재 어셈블리에 포함되어 있거나 현재 XAML 페이지 또는 어셈블리와 나란히 느슨하게되어 있습니다 (프로젝트의 Content으로 표시된 경우에만 후자) A/B/logo.jpg 컴파일 할 때 정의 된 내부 하위 폴더 (A\B) 구조를 사용하거나 현재 XAML 페이지 또는 어셈블리와 관련하여 느슨한 A\B 하위 폴더를 사용하여 현재 어셈블리에 포함됩니다 (프로젝트의 Content으로 표시된 경우에만 후자의 경우) c:\temp\logo.j...

WPF Text

이미지
Text Block TextBlock에는 FontFamily, FontSize, FontStyle, FontWeight 및 FontStretch와 같은 모양을 수정하기위한 여러 가지 간단한 속성이 포함되어 있습니다. 그러나 TextBlock의 가장 큰 비밀은 Content 속성이 Text 속성이 아니라 Inline이라는 객체 컬렉션입니다.  1: <!-- TextBlock.Inlines가 여기에 설정 됩니다 --> 2: <TextBlock>Text in a TextBlock</TextBlock> 형식 변환기는 값을 단순한 문자열과 유사하게 만들지 만 실제로 Run이라는 요소가있는 컬렉션입니다. 따라서 앞의 XAML은 다음과 같습니다. 1: <TextBlock><Run Text="Text in a TextBlock" /></TextBlock> Run은 단순히 동일한 서식을 가진 텍스트 덩어리입니다. Run에는 상위 TextBlock의 해당 속성 인 FontFamily, FontSize, FontStretch, FontStyle, FontWeight, Foreground 및 TextDecorations를 재정의 할 수있는 몇 가지 서식 속성이 있습니다. 1: <TextBlock> 2: <Run FontStyle="Italic" FontFamily="Georgia" Foreground="Red">Rich</Run> 3: <Run FontSize="30" FontFamily="Comic Sans MS" Foreground="Blue"> Text </Run> 4: <Run FontFamily="Ar...

WPF Items Controls

이미지
Items Controls 이 컨트롤에는 단일 콘텐츠가 아닌 무제한 컬렉션이 포함될 수 있습니다. 모든 항목 컨트롤은 ContentControl과 마찬가지로 Control의 직접 하위 클래스 인 추상 ItemsControl 클래스에서 파생됩니다. ItemsControl은 해당 내용을 ItemCollection 유형의 Items 속성에 저장합니다. 각 항목은 기본적으로 콘텐츠 컨트롤 내에서 렌더링되는 것과 마찬가지로 렌더링되는 임의의 개체가 될 수 있습니다. 즉, 모든 UIElement가 예상대로 렌더링되고 다른 형식은 (데이터 템플릿 무시) ToString 메서드에서 반환 된 문자열을 포함하는 TextBlock로 렌더링됩니다.  임의의 개체가 Item으로 설정 가능 공통 기능 Items 및 ItemsSource 외에도 ItemsControl에는 다음과 같은 몇 가지 추가 흥미로운 속성이 있습니다. . HasItems - 선언적 XAML에서 컨트롤의 빈 상태를 쉽게 처리 할 수 ​​있도록하는 읽기 전용 부울 속성입니다. C #에서이 속성을 사용하거나 단순히 Items.Count의 값을 확인할 수 있습니다.  . IsGrouping - 컨트롤의 항목이 최상위 그룹으로 나뉘어져 있는지 여부를 알려주는 읽기 전용 부울 속성입니다. 이 그룹은 항목 그룹을 관리하고 이름을 지정하기위한 여러 속성을 포함하는 ItemsCollection 클래스에서 직접 수행됩니다.  . AlternationCount 및 AlternationIndex - 이 속성 쌍은 해당 인덱스를 기반으로 항목 스타일을 쉽게 바꿀 수 있습니다. 예를 들어 AlternationCount를 2로 설정하면 짝수 색인 항목에 하나의 스타일을, 홀수 색인 항목에 다른 스타일을 제공 할 수 있습니다.   . DisplayMemberPath- 각 개체가 렌더링되는 방식을 변경하는 각 항목의 속성 이름 (또는 더 복잡한 ...

WPF 응용 프로그램 상태 유지 및 복원

이미지
응용 프로그램 상태 유지 및 복원 표준 Windows 응용 프로그램은 사용자 보안 설정에 따라 컴퓨터에 대한 모든 액세스 권한을 가질 수 있으므로 Windows 레지스트리 또는 로컬 파일 시스템 사용과 같이 데이터를 저장하기위한 다양한 옵션이 있습니다. 또 다른 대안은 .NET Framework의 격리 된 저장소 기술을 사용하는 것입니다.   IsolatedStorageFile 및 IsolatedStorageFileStream 클래스를 이용해 Window의 BackgroundColor를 설정한 후 상태 유지를 위해 격리 된 저장소에 파일 저장을 한 후 파일을 읽어 복원 시키는 예제를 만들어 보겠습니다. 예제 Window의 Background Color를 설정하는 버튼 2개를 선언 합니다. White 버튼은 Background Color를 흰색으로 Black 버튼은 Background Color를 검은색으로 변경하는 이벤트를 설정 합니다. App 실행 화면 XAML 선언 1: <Window x:Class="PersistAndRestoreApplication.MainWindow" 2: xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4: xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 5: xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 6: xmlns:local="clr-namespace:PersistAndRestoreApplicati...

WPF Input Events

이미지
Input Events Routed Events Routed Events는 요소 트리와 잘 작동하도록 설계된 이벤트 타입 입니다. Routed Events가  발생하면 시각적 및 논리적 트리를 위,아래로 이동할 수 있어 사용자 정의 코드 없이 간단하고 일관된 방식으로 각 요소에서 이벤트를 발생 시킵니다.  Routed Events 전략 및 이벤트 처리기 등록 된 모든 라우트 된 이벤트는 세 가지 라우팅 전략 중 하나를 선택합니다. 즉, 이벤트 발생이 요소 트리를 통해 이동하는 방식 중 하나를 선택합니다. 이러한 전략은 RoutingStrategy 열거 형의 값으로 표시됩니다. Tunnerling - 루트에서 이벤트가 먼저 발생하고 소스 요소에 도달 할 때까지 (또는 핸들러가 이벤트를 처리 된 것으로 표시하여 터널링을 중지 할 때까지) 트리 아래의 각 요소에서 발생합니다. Bubbling - 이벤트는 소스 요소에서 먼저 발생하고 루트에 도달 할 때까지 (또는 처리기가 이벤트를 처리 된 것으로 표시하여 버블 링을 중단 할 때까지) 트리 위쪽의 각 요소에서 발생합니다. Direct - 이벤트는 원본 요소에서만 발생합니다. 이는 일반 .NET 이벤트와 동일한 동작입니다. 라우트 된 이벤트 처리기는 일반적인 .NET 이벤트 처리기의 패턴과 일치하는 서명을가집니다. 첫 번째 매개 변수는 일반적으로 sender라는 System.Object이고 두 번째 매개 변수 (일반적으로 e라는)는 System.EventArgs에서 파생되는 클래스입니다. sender 매개 변수는 항상 핸들러가 첨부 된 요소이며, e 매개 변수는 다음 네 가지 유용한 속성을 제공하는 EventArgs의 하위 클래스 인 RoutedEventArgs의 인스턴스입니다. RoutedEventArgs의 유용한 속성 : Source - 원래 이벤트를 발생시킨 논리적 트리의 요소 OriginalSource - 이벤트를 발생시킨 시각적 ...

WPF Layout를 이용한 회원 가입 윈도우 만들기

이미지
오늘은 WPF의 Layout 기능을 이용한 어플 시작 페이지를 만들어 보고자 합니다. 결과물 부터 확인 해 보겠습니다. 계정 만들기 초기 비어 있는 유저 사진 공간을 채울 이미지를 제외 하고는 WPF의 Layout 기능만 가지고 구현 할 수 있습니다. 이 Layout은 상위부터 하위까지 각 로우 별로 하나의 엘레멘트를 가지고 있는 구조이기에 저는 StackPanel을 이용해 구현 하였습니다. 그럼 XAML 코드를 한번 볼까요? StackPanel 태그를 선언 합니다. StackPanel에 Margin을 적당하게 설정 합니다. 1: <Window x:Class="WunderlistDoIt.RegisterWindow" 2: xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4: xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 5: xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 6: xmlns:local="clr-namespace:WunderlistDoIt" 7: mc:Ignorable="d" 8: Title="RegisterWindow" 9: Height="650" 10: Width="450"> 11: <StackPanel Margin="10"> 12: ...

WPF Layout를 이용한 시작 윈도우 만들기

이미지
오늘은 WPF의 Layout 기능을 이용한 어플 시작 페이지를 만들어 보고자 합니다. 무엇을 만들지 먼저 알아야 겠죠? 결과물 부터 확인 해 보겠습니다. 어플 시작 화면 로고 이미지는 구글에 무료 이미지를 검색해 임의로 사용 하였습니다. Logo 이미지, 계정 만들기 버튼, 로그인 버튼, 안내 문구 순으로 정렬이 되어 있습니다. 이런 구조는 StackPanel을 사용하는 것이 좋다고 생각이 되어 이번 Layout의 구조는 StackPanel을 이용 하겠습니다. 그럼 XAML 코드를 한번 볼까요? StackPanel을 선언 합니다. StackPanel에 Width, Margin을 적당하게 설정 합니다. 저는 창을 늘려도 폼이 늘어나는게 싫어 MaxWidth 속성을 사용했습니다. 1: <Window x:Class="WunderlistDoIt.StartWindow" 2: xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4: xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 5: xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 6: xmlns:local="clr-namespace:WunderlistDoIt" 7: mc:Ignorable="d" 8: Title="StartWindow" 9: Height="650" 10: Width=...

WPF Hierarchy

이미지
DispatcherObject - 생성 한 스레드에서만 액세스하려는 모든 객체를위한 기본 클래스입니다. 대부분의 WPF 클래스는 DispatcherObject에서 파생되므로 본질적으로 스레드가 안전하지 않습니다. Dispatcher 부분은 7 장 "응용 프로그램의 구조화 및 배포"에서 더 자세히 설명하는 WPF의 Win32 형 메시지 루프 버전을 나타냅니다. DependencyObject - 종속성 속성을 지원할 수있는 모든 객체의 기본 클래스입니다. Freezable - 성능상의 이유로 읽기 전용 상태로 "고정"될 수있는 객체의 기본 클래스입니다. 고정 된 Freezables는 다른 모든 DispatcherObject와는 달리 여러 스레드간에 안전하게 공유 할 수 있습니다. 고정 된 개체는 고정 할 수 없지만 복제하여 고정되지 않은 사본을 만들 수 있습니다. 대부분의 Freezable은 브러시, 펜, 지오메트리 또는 애니메이션 클래스와 같은 그래픽 프리미티브입니다. Visual - 자체 2D 시각적 표현이있는 모든 객체의 기본 클래스입니다. UIElement - 라우트 된 이벤트, 명령 바인딩, 레이아웃 및 포커스를 지원하는 모든 2D 시각적 개체의 기본 클래스입니다. Visual3D - 고유 한 3D 시각적 표현을 갖는 모든 객체의 기본 클래스입니다. UIElement3D - 라우트 된 이벤트, 명령 바인딩 및 포커스를 지원하는 모든 3D 시각적 개체의 기본 클래스입니다. ContentElement - UIElement와 비슷한 기본 클래스이지만 렌더링 동작 자체가없는 문서 관련 부분의 경우. 대신 ContentElements는 Visual 파생 클래스에서 호스팅되어 화면에 렌더링됩니다. 각 ContentElement에는 여러 개의 비주얼이 올바르게 렌더링되어야합니다. FrameworkElement - 스타일, 데이터 바인딩, 리소스 및 툴팁 및 상황에 맞는 메뉴와 같은 Windows ...