sdk:wpf:z_막메모
차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판이전 판다음 판 | 이전 판 | ||
sdk:wpf:z_막메모 [2017/06/23 15:58] – kieuns | sdk:wpf:z_막메모 [2024/04/23 22:44] (현재) – 바깥 편집 127.0.0.1 | ||
---|---|---|---|
줄 1: | 줄 1: | ||
+ | |||
+ | ====== 사소but중요 ====== | ||
+ | |||
+ | =====특수기호 입력===== | ||
+ | |||
+ | |< 90% 50% >| | ||
+ | | %%<%% | %%& | ||
+ | | %%>%% | %%& | ||
+ | | %%&%% | %%& | ||
+ | | %%"%% | %%& | ||
+ | |||
+ | <code xml> | ||
+ | <!-- Display special characters that require special encoding: < > & " --> | ||
+ | < | ||
+ | & | ||
+ | & | ||
+ | & | ||
+ | & | ||
+ | </ | ||
+ | |||
+ | <!-- Display miscellaneous special characters --> | ||
+ | < | ||
+ | Cæsar | ||
+ | © 2006 <!-- Copyright symbol --> | ||
+ | Español <!-- Tilde symbol --> | ||
+ | ¥ < | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ====== 데이터 바인딩 ====== | ||
+ | |||
+ | 컨트롤을 사용하는 것은 그나마 쉬운데, 데이터 바인딩 쪽은 **바인딩할 데이터 소스 설정**과 **바인딩 소스 연결** 부분이 쉽지 않다. | ||
+ | |||
+ | ===== 바인딩 ===== | ||
+ | |||
+ | 바인딩(걸수 있는)소스 | ||
+ | |||
+ | * CLR 개체 | ||
+ | * XML 데이터 또는 파일 | ||
+ | * ADO.Net 데이터 | ||
+ | * UIElement(? | ||
+ | * List와 같은 목록 개체 | ||
+ | |||
+ | Mode (연결 방식) | ||
+ | |||
+ | * OneWay | ||
+ | * TwoWay | ||
+ | * OneWayToSource | ||
+ | |||
+ | ===== 바인딩소스 업데이트 ===== | ||
+ | |||
+ | * 소스업데이트 : TwoWay, OneWayToSource 의 바인딩은 대상 속성의 변경 내용을 수신, 다시 바인딩 소스에 전파. | ||
+ | * 소스 업데이트 트리거 : 바인딩 소스에 변경 내용을 전파하는 타이밍 | ||
+ | * LostFocus : focus를 잃었을때 | ||
+ | * PropertyChanged : 입력이 진행 중인 과정 사이 사이에 (TextBox에 타이핑 하는 쭉쭉 전송) | ||
+ | * Explicit : 응용프로그램에서 UpdateSource를 호출할때 | ||
+ | * 변경하는 방법 (UpdateSourceTrigger) | ||
+ | |||
+ | |||
+ | ===== 참고(읽을만한) URL ===== | ||
+ | |||
+ | * 웹참조문서 : [[http:// | ||
+ | |||
+ | < | ||
+ | WPF | ||
+ | * url : http:// | ||
+ | * 이전에 ASP.NET, Windows Forms 등의 관리되는 기술을 사용하여 .NET Framework으로 응용 프로그램을 작성해 본 경험이 있는 개발자에게는 기본 WPF 프로그래밍 환경이 매우 친숙하답니다. | ||
+ | |||
+ | Binding | ||
+ | |||
+ | 바인딩(걸수 있는)소스 | ||
+ | CLR 개체 | ||
+ | XML 데이터 또는 파일 | ||
+ | ADO.Net 데이터 | ||
+ | UIElement(? | ||
+ | List와 같은 목록 개체 | ||
+ | |||
+ | Mode | ||
+ | OneWay | ||
+ | TwoWay | ||
+ | OneWayToSource | ||
+ | |||
+ | 정적 바인딩의 예 | ||
+ | |||
+ | <Window | ||
+ | xmlns=" | ||
+ | xmlns: | ||
+ | xmlns: | ||
+ | Title=" | ||
+ | |||
+ | <!-- Window 태그의 리소스 부분에 (??)를 연결 --> | ||
+ | < | ||
+ | <!-- SomeList1, SomeList2 라는 클래스를 " | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | <!-- 위에서 정의한 리소스를 DataContext에 선언해서 사용한다. --> | ||
+ | < | ||
+ | < | ||
+ | <Binding Path=" | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | - 윈도우가 아닌 탭 또는 그리드에도 " | ||
+ | |||
+ | MSDN 레퍼런스 | ||
+ | |||
+ | - [[http:// | ||
+ | - [[http:// | ||
+ | - [[http:// | ||
+ | </ | ||
+ | |||
+ | ====== WPF Control ====== | ||
+ | |||
+ | = StackPanel : StackPanel 태그 안쪽의 컨트롤을 차곡차곡 순서대로 배열해서 보여준다. | ||
+ | = Grid : StackPanel같은 자동 정렬 없이, 유저가 배치한 그대로 화면에 표시 | ||
+ | = ListBox : 리스트박스 (위에서 아래로 쭉 가는) | ||
+ | = ListView : 리스트뷰. 윈도우즈의 그것. | ||
+ | = Expander : 이것 아래 항목을 폴딩하는 그것 | ||
+ | = sys: | ||
+ | = ComboBox : cb | ||
+ | = ComboBoxItem : cbi | ||
+ | = ListBox : 리스트박스 | ||
+ | = ListBoxItem : 리스트박스아이템 | ||
+ | = SelectedItems : 리스트박스 같은 거에서 여러개 선택 | ||
+ | = ListView : 리스트뷰 | ||
+ | = ListView.View : 리스트뷰의 뷰? | ||
+ | = TextBox : 한줄 이상의 내용을 입력 | ||
+ | = InkCanvas : 마우스나 스타일러스로 수기 작성된 내용을 인식하기 위한 컨트롤 | ||
+ | | ||
+ | |||
+ | * TabControl , TabItem | ||
+ | * Menu , MenuItem , Separator , ContextMenu | ||
+ | * TreeView , TreeViewItem | ||
+ | * ToolBar | ||
+ | * StatusBar | ||
+ | * ProgressBar | ||
+ | * Slider | ||
+ | * TextBox | ||
+ | * TextChanged , SelectionChanged | ||
+ | * RichTextBox (TextBoxBased) | ||
+ | * CaretIndex, SelectionStart , SelectionEnd | ||
+ | * PasswordBox | ||
+ | * Border | ||
+ | * BorderBrush, | ||
+ | |||
+ | 셀렉터(selector)컨트롤 | ||
+ | |||
+ | * 인덱싱 된 아이템들을 가진 | ||
+ | * 후계컨트롤 | ||
+ | * 콤보 / 리스트박스 / 리스트뷰 / 탭컨트롤 | ||
+ | |||
+ | 공통 프로퍼티? | ||
+ | |||
+ | * SelectedIndex : 선택된 아이템 인덱스. 제로베이스. | ||
+ | * SelectedItem | ||
+ | * SelectedValue : 선택된 아이템 값 | ||
+ | |||
+ | 셀렉터 컨트롤의 개별 아이템의 첨부 프로퍼티 | ||
+ | |||
+ | * IsSelected : 포커스 상태인가? | ||
+ | * IsSelectionActive : 포커싱 되어 있는지 알려주는 읽기 전용 | ||
+ | |||
+ | 리스트박스 | ||
+ | |||
+ | * Single (하나만) , Multiple (여러개) , Extended (다수 선택) | ||
+ | |||
+ | 리스트뷰 | ||
+ | |||
+ | * 표현법이 다양한 뷰프로퍼티를 사용한다. ViewBase 타입의 추상 클래스. | ||
+ | * GridView 컨트롤 갖고 있다. | ||
+ | * 리스트뷰의 아이템들은 리스트박스에서 단순 리스트를 보여줄 때 사용하기 적당하다. | ||
+ | * 각 열마다 다른 데이터를 보여주려면 GridViewColumn의 DisplayMemberBinding 프로퍼티를 이용하는 것이 좋다. 이러면 리스트뷰는 각 열마다 복잡한 객체를 포함할 수 있게 되고 행의 값은 객체의 프로퍼티나 서브 프로퍼티가 된다. | ||
+ | * 데이터 바인딩에 대한 지식이 필요하고 ItemsControl의 DisplayMemberPath를 다뤄야 한다. | ||
+ | |||
+ | 서브프로퍼티 | ||
+ | |||
+ | * Margin, Padding, Background, | ||
+ | |||
+ | ===== 엘리먼트의 크기 및 위치 조정과 형태변형 ===== | ||
+ | |||
+ | ==== 형태 변형 적용 ==== | ||
+ | |||
+ | * LayoutTransform : 엘리먼트가 화면 배치 되기 전에 적용 | ||
+ | * RenderTransform : 화면 배치가 끝나고 렌더링이 되기 바로 직전에 적용 | ||
+ | |||
+ | ==== 키워드 ==== | ||
+ | |||
+ | * _CONTROL_.RenderTransform | ||
+ | * RenderTransformOrigin | ||
+ | * Angle | ||
+ | * RotateTransform | ||
+ | * Angle , CenterX , CenterY | ||
+ | * ScaleTransform | ||
+ | * ScaleX , ScaleY , CenterX , CenterY | ||
+ | * SkewTransform | ||
+ | * AngleX , AngleY , CenterX , CenterY | ||
+ | * TranslateTransform | ||
+ | * x , y | ||
+ | * MatrixTransform : 기초적인 형태 변형. System.Windows.Media.Matrix 타입. | ||
+ | |||
+ | ===== 패널 이용한 화면 배치 ===== | ||
+ | * TabPanel | ||
+ | * ToolBarOverflowPanel | ||
+ | * ToolBarTray | ||
+ | * UniformGrid | ||
+ | ==== 컨텐츠 오버플로 처리 ==== | ||
+ | * 오버플로처리방식 : 클리핑, 스크롤, 스케일링, | ||
+ | * 클리핑 : ClipToBounds=true of false | ||
+ | * 스크롤 : ScrollViewer 안에 내용물을 넣는다. | ||
+ | * 프로퍼티 : \\ VerticalScrollBarVisibility \\ HorizontalScrollBarVisibility | ||
+ | * 스트레치 : Stretch=" | ||
+ | |||
+ | ===== 프로그램의 구조화와 배포 ===== | ||
+ | |||
+ | 윈도우 엘리먼트 외관 | ||
+ | * Icon, Title, WindowStyle, | ||
+ | * WindowStartupLocation 프로퍼티 | ||
+ | * TopMost, | ||
+ | |||
+ | CommandLine 얻기 | ||
+ | * System.Enviroment.GetCommandLineArgs | ||
+ | |||
+ | Application class | ||
+ | * 프로그램 차원의 처리를 위한 다수 이벤트, 프로퍼티, | ||
+ | |||
+ | 중복 실행 방지 | ||
+ | * 이름있는 뮤텍스를 써서 중복 실행을 막는다. | ||
+ | <code csharp> | ||
+ | bool _mutex; | ||
+ | using( System.Threading.Mutex m = new System.Threading.Mutex(true, | ||
+ | if(_mutex) // 첫번째 인스턴스. 프로그램 실행. | ||
+ | else // 이미 실행 중 | ||
+ | </ | ||
+ | |||
+ | ===== System.Windows ===== | ||
+ | |||
+ | * Owner : 부모설정 <code csharp> | ||
+ | WhoWeAreDialog _dlg = new WhoWeAreDialog(); | ||
+ | _dlg.Owner = this; | ||
+ | // xaml에는 WindowStartupLocation=' | ||
+ | _dlg.ShowDialog(); | ||
+ | </ | ||
+ | | ||
+ | ===== 대화상자 만들기 보여주기 ===== | ||
+ | |||
+ | ==== 공통 대화 상자 ==== | ||
+ | |||
+ | * ColorDialog, | ||
+ | |||
+ | 미지원 대화상자는 System.Windows.Forms.dll 을 사용한다. | ||
+ | |||
+ | ==== 직접 만드는 대화상자 ==== | ||
+ | |||
+ | * 모달 : ShowDialog() 호출 | ||
+ | * 시작위치 조정 : Window.WindowStartupLocation | ||
+ | * this.DialogResult 에서 ShowDialog() 리턴 값을 설정 한다. | ||
+ | |||
+ | ==== 설정 저장 불러오기 ==== | ||
+ | |||
+ | 아래 클래스 써서 파일에 환경 값을 쓰거나 읽어온다. | ||
+ | |||
+ | * IsolatedStorageFile | ||
+ | * IsolatedStorageFileStream | ||
+ | |||
+ | ' | ||
+ | |||
+ | |||
+ | ===== 탐색 기반 윈도우즈 응용 프로그램 ===== | ||
+ | 실용적인 예제인가? | ||
+ | |||
+ | ==== 페이지와 탐색 컨테이너 ==== | ||
+ | |||
+ | <code csharp> | ||
+ | NavigationService.Navigate(_OTHER_PAGE_); | ||
+ | // or | ||
+ | NavigationService.Navigate(new Uri(" | ||
+ | // or | ||
+ | NavigationService.Navigate(new Uri(" | ||
+ | </ | ||
+ | |||
+ | ==== 하이퍼링크 ==== | ||
+ | |||
+ | <code xml> | ||
+ | < | ||
+ | Click < | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ==== 저널 기능 ==== | ||
+ | |||
+ | 페이지 탐색의 히스토리. Back, Forward 지원해서 남아 있는 기록대로 페이지 전환한다. | ||
+ | |||
+ | ==== 탐색 이벤트 ==== | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ===== 가젯 스타일 응용 프로그램 ===== | ||
+ | |||
+ | <file xml GadgetWindow.xaml> | ||
+ | <Window x: | ||
+ | xmlns=" | ||
+ | xmlns: | ||
+ | xmlns: | ||
+ | xmlns: | ||
+ | xmlns: | ||
+ | mc: | ||
+ | Title=" | ||
+ | AllowsTransparency=' | ||
+ | MouseLeftButtonDown=' | ||
+ | <!-- AllowsTransparency, | ||
+ | < | ||
+ | <Ellipse Fill=' | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | <Button Margin=' | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | <file csharp GadgetWindow.xaml.cs> | ||
+ | using System; | ||
+ | using System.Collections.Generic; | ||
+ | using System.Linq; | ||
+ | using System.Text; | ||
+ | using System.Threading.Tasks; | ||
+ | using System.Windows; | ||
+ | using System.Windows.Controls; | ||
+ | using System.Windows.Data; | ||
+ | using System.Windows.Documents; | ||
+ | using System.Windows.Input; | ||
+ | using System.Windows.Media; | ||
+ | using System.Windows.Media.Imaging; | ||
+ | using System.Windows.Shapes; | ||
+ | |||
+ | namespace ConvToUTF8 | ||
+ | { | ||
+ | /// < | ||
+ | /// GadgetWindow.xaml에 대한 상호 작용 논리 | ||
+ | /// </ | ||
+ | public partial class GadgetWindow : Window | ||
+ | { | ||
+ | public GadgetWindow() | ||
+ | { | ||
+ | InitializeComponent(); | ||
+ | } | ||
+ | |||
+ | void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) | ||
+ | { | ||
+ | this.DragMove(); | ||
+ | } | ||
+ | |||
+ | void Button_Click(object sender, RoutedEventArgs e) | ||
+ | { | ||
+ | this.Close(); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||