■ XAML 속성성 값 설정시 태그 확장 적용을 방지하는 방법을 보여준다. ▶ 예제 코드 (XAML)
|
<TextBlock xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" FontSize="20" Text="{}{just a little text in herel}" /> |
■ ResourceDictionary(또는 다른 프레임워크의 유사한 사전 개념)의 각 리소스에 대한 고유한 키를 설정하는 방법을 보여준다. ▶ 예제 코드 (XAML)
|
... <StackPanel.Resources> <s:Double x:Key="LargeFontSizeDoubleKey">18.7</s:Double> <s:Double x:Key="SmallFontSizeDoubleKey">14.7</s:Double> </StackPanel.Resources> ... |
■ XAML 속성 값 설정시 값의 단위를 설정하는 방법을 보여준다. ▶ 사용 가능 단위 (XAML)
|
인치("in"), 센티미터("cm"), 포인트("pt"), 픽셀("px") Width="1.51in" Width="3.81cm" Width="108pt" ※ 단위는 대소문자 구분없이 사용 가능하다. ※ 값과 단위 사이 공백이 있어도 된다. Width="1.51 in" Width="3.81 cm" Width="108 pt" |
▶ 과학적 표기법 (XAML)
▶
더 읽기
■ TextBox 클래스에서 탭 키를 누른 경우 탭 키 대신 공백 문자를 추가하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
using System.Windows; using System.Windows.Controls; using System.Windows.Input; /// <summary> /// 텍스트 박스 /// </summary> private TextBox textBox; /// <summary> /// 탭 공백 수 /// </summary> private int tabSpaceCount = 4; #region 프리뷰 키 다운시 처리하기 - OnPreviewKeyDown(e) /// <summary> /// 프리뷰 키 다운시 처리하기 /// </summary> /// <param name="e">이벤트 인자</param> protected override void OnPreviewKeyDown(KeyEventArgs e) { base.OnPreviewKeyDown(e); if(e.Source == this.textBox && e.Key == Key.Tab) { string insert = new string(' ', this.tabSpaceCount); int characterIndex = this.textBox.SelectionStart; int lineIndex = this.textBox.GetLineIndexFromCharacterIndex(characterIndex); if(lineIndex != -1) { int columnIndex = characterIndex - this.textBox.GetCharacterIndexFromLineIndex(lineIndex); insert = new string(' ', this.tabSpaceCount - columnIndex % this.tabSpaceCount); } this.textBox.SelectedText = insert; this.textBox.CaretIndex = this.textBox.SelectionStart + this.textBox.SelectionLength; e.Handled = true; } } #endregion |
■ TextBox 클래스의 GetCharacterIndexFromLineIndex 메소드를 사용해 현재 열의 인덱스를 구하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
using System.Windows.Controls; #region 현재 열 구하기 - GetCurrentColumn(textBox) /// <summary> /// 현재 열 구하기 /// </summary> /// <param name="textBox">텍스트 박스</param> /// <returns>현재 열</returns> public int GetCurrentColumn(TextBox textBox) { int index = this.textBox.SelectionStart; int line = this.textBox.GetLineIndexFromCharacterIndex(index); int column = index - this.textBox.GetCharacterIndexFromLineIndex(line); return column; } #endregion |
■ TextBox 클래스의 GetLineIndexFromCharacterIndex 메소드를 사용해 현재 줄의 인덱스를 구하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
using System.Windows.Controls; #region 현재 줄 구하기 - GetCurrentLine(textBox) /// <summary> /// 현재 줄 구하기 /// </summary> /// <param name="textBox">텍스트 박스</param> /// <returns>현재 줄</returns> public int GetCurrentLine(TextBox textBox) { int index = this.textBox.SelectionStart; int line = this.textBox.GetLineIndexFromCharacterIndex(index); return line; } #endregion |
■ x:Code 엘리먼트를 사용해 XAML에서 실행되는 C# 코드를 정의하는 방법을 보여준다. ▶ 예제 코드 (C#)
|
<x:Code> <![CDATA[ // C# 코드가 기술된다. ]]> </x:Code> |
■ XAML 페이지에 대한 코드 숨김을 제공하는 클래스의 CLR 네임스페이스 및 클래스 이름을 지정한다. ▶ 예제 코드 (XAML)
|
x:Class="MyNamespace.MyClassName" |
■ XmlWriter 클래스의 Create/Save 정적 메소드를 사용해 FrameworkTemplate 객체에서 XAML을 구하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
using System; using System.Text; using System.Windows; using System.Windows.Markup; using System.Xml; #region XAML 구하기 - GetXAML(template) /// <summary> /// XAML 구하기 /// </summary> /// <param name="template">프레임워크 템플리트</param> /// <returns>XAML</returns> public string GetXAML(FrameworkTemplate template) { XmlWriterSettings setting = new XmlWriterSettings(); setting.Indent = true; setting.IndentChars = new string(' ', 4); setting.NewLineOnAttributes = true; StringBuilder stringBuilder = new StringBuilder(); XmlWriter writer = XmlWriter.Create(stringBuilder, setting); try { XamlWriter.Save(template, writer); } catch(Exception) { return string.Empty; } return stringBuilder.ToString(); } #endregion |
■ XmlTextReader 클래스의 Load 메소드를 사용해 XAML에서 객체를 생성하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
using System; using System.Windows.Markup; using System.Xml; #region 객체 생성하기 - CreateObject(reader) /// <summary> /// 객체 생성하기 /// </summary> /// <param name="reader">XML 텍스트 리더</param> /// <returns>생성 객체</returns> public object CreateObject(XmlTextReader reader) { return XamlReader.Load(reader); } #endregion |
■ 웹 서버에서 .xaml 확장자 MIME 타입을 등록하는 방법을 보여준다. ▶ 등록 정보
|
AddType application/xaml+xml xaml |
※ 웹 서버상에서 .htaccess 파일에 다음과 같이 한
더 읽기
■ IValueConverter 인터페이스를 구현해 타입을 타입명 변환자를 사용하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
using System; using System.Globalization; using System.Windows.Data; /// <summary> /// 타입→타입명 변환자 /// </summary> public class TypeToTypeNameConverter : IValueConverter { //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Public #region 변환하기 - Convert(sourceValue, targetType, parameter, cultureInfo) /// <summary> /// 변환하기 /// </summary> /// <param name="sourceValue">소스 값</param> /// <param name="targetType">타겟 타입</param> /// <param name="parameter">매개 변수</param> /// <param name="cultureInfo">문화 정보</param> /// <returns>변환 값</returns> public object Convert(object sourceValue, Type targetType, object parameter, CultureInfo cultureInfo) { return (sourceValue as Type).Name; } #endregion #region 역변환하기 - ConvertBack(sourceValue, targetType, parameter, cultureInfo) /// <summary> /// 역변환하기 /// </summary> /// <param name="sourceValue">소스 값</param> /// <param name="targetType">타겟 타입</param> /// <param name="parameter">매개 변수</param> /// <param name="cultureInfo">문화 정보</param> /// <returns>역변환 값</returns> public object ConvertBack(object sourceValue, Type targetType, object parameter, CultureInfo cultureInfo) { return null; } #endregion } |
■ URI를 참조해 디스크 또는 네트워크에 저장된 이미지 파일의 특정 부분을 읽어서 비트맵 이미지를 구하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
using System; using System.Windows; using System.Windows.Media.Imaging; #region 비트맵 이미지 구하기 - GetBitmapImage(uri, rectangle) /// <summary> /// 비트맵 이미지 구하기 /// </summary> /// <param name="uri">URI</param> /// <param name="rectangle">정수 사각형</param> /// <returns>비트맵 이미지</returns> public BitmapImage GetBitmapImage(Uri uri, Int32Rect rectangle) { BitmapImage bitmapImage = new BitmapImage(); bitmapImage.BeginInit(); bitmapImage.UriSource = uri; bitmapImage.SourceRect = rectangle; bitmapImage.EndInit(); return bitmapImage; } #endregion |
■ URI를 참조해 디스크 또는 네트워크에 저장된 이미지 파일을 읽어서 비트맵 이미지를 구하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
using System; using System.Windows; using System.Windows.Media.Imaging; #region 비트맵 이미지 구하기 - GetBitmapImage(uri) /// <summary> /// 비트맵 이미지 구하기 /// </summary> /// <param name="uri">URI</param> /// <returns>비트맵 이미지</returns> public BitmapImage GetBitmapImage(Uri uri) { BitmapImage bitmapImage = new BitmapImage(); bitmapImage.BeginInit(); bitmapImage.UriSource = uri; bitmapImage.EndInit(); return bitmapImage; } #endregion |
■ RichTextBox 클래스에서 선택한 문자열의 폰트, 폰트 크기, 폰트 스타일 등을 구하는 방법을 보여준다. ▶ RichTextBox 클래스 : 선택 문자열의 속성값 구하기
더 읽기
■ FlowDocument 객체의 ContentStart/ContentEnd 속성을 갖고 생성한 TextRange 객체를 사용해 해당 범위의 문자열을 지우는 방법을 보여준다. ▶ 예제 코드 (C#)
|
#region FlowDocument 지우기 - ClearFlowDocument(flowDocument) /// <summary> /// FlowDocument 지우기 /// </summary> /// <param name="flowDocument">FlowDocument 객체</param> public void ClearFlowDocument(FlowDocument flowDocument) { TextRange textRange = new TextRange(flowDocument.ContentStart, flowDocument.ContentEnd); textRange = string.Empty; } #endregion |
■ RichTextBox 클래에서 선택한 문자열의 폰트, 크기, 스타일을 설정하는 방법을 보여준다. ▶ RichTextBox 클래스 : 선택 문자열의 속성값 설정하기 예제 (C#)
|
SetSelectionStringPropertyValue<FontFamily>(richTextBox, FlowDocument.FontFamilyProperty, fontFamily); SetSelectionStringPropertyValue<double>(richTextBox, FlowDocument.FontSizeProperty, fontSize); SetSelectionStringPropertyValue<FontWeight>(richTextBox, FlowDocument.FontWeightProperty, fontWeight); SetSelectionStringPropertyValue<FontStyle>(richTextBox, FlowDocument.FontStyleProperty, fontStyle); SetSelectionStringPropertyValue<Brush>(richTextBox, FlowDocument.BackgroundProperty, backgroundBrush); SetSelectionStringPropertyValue<Brush>(richTextBox, FlowDocument.ForegroundProperty, foregroundBrush); SetSelectionStringPropertyValue<TextAlignment>(richTextBox, FlowDocument.TextAlignmentProperty, textAlignment); |
더 읽기
■ DispatcherTimer 클래스의 Tick 이벤트를 사용해 미디어 플레이어의 재생 위치를 Slider 객체의 Value 속성에 설정하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
using System.Windows.Controls; using System.Windows.Media; using System.Windows.Threading; private Slider slider; private MediaPlayer mediaPlayer; ... private DispatcherTimer dispatcherTimer = new DispatcherTimer(); ... this.DispatcherTimer.Interval = TimeSpan.FromSeconds(1); this.DispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick); this.DispatcherTimer.Start(); ... #region 디스패처 타이머 틱 발생시 처리하기 - dispatcherTimer_Tick(sender, e) /// <summary> /// 디스패처 타이머 틱 발생시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private static void dispatcherTimer_Tick(object sender, EventArgs e) { this.slider.Value = this.mediaPlayer.Position.TotalSeconds; } #endregion |
■ Slider 클래스의 ValueChanged 이벤트를 사용해 MediaPlayer 객체의 Position 속성을 설정하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
using System.Windows; using System.Windows.Media; using System.Windows.Controls; ... /// <summary> /// 미디어 플레이어 /// </summary> private MediaPlayer mediaPlayer; /// <summary> /// 슬라이더 /// </summary> private Slider slider; ... this.slider.Maximum = this.mediaPlayer.NaturalDuration.TimeSpan.TotalSeconds; this.slider.IsEnabled = true; this.slider.ValueChanged += new RoutedPropertyChangedEventHandler<double>(slider_ValueChanged); ... #region 슬라이더 값 변경시 처리하기 - slider_ValueChanged(sender, e) /// <summary> /// 슬라이더 값 변경시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) { this.mediaPlayer.Position = TimeSpan.FromSeconds(this.slider.Value); } #endregion |
■ MediaPlayer 클래스를 사용해 컴퓨터나 네트워크에 저장되어 있는 음악 파일을 재생하거나 일시 정지하거나 중단하는 방법을 보여준다. ▶ MediaPlayer 객체 생성하기 (C#)
|
using System.Windows.Media; MediaPlayer mediaPlayer = new MediaPlayer(); mediaPlayer.Open(uri); |
더 읽기
■ 피타고라스 법칙을 사용해 두 Point 객체 사이의 거리를 계산하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
using System; using System.Windows; #region 거리 구하기 - GetDistance(startPoint, endPoint) /// <summary> /// 거리 계산하기 /// </summary> /// <param name="startPoint">시작 위치</param> /// <param name="endPoint">종료 위치</param> /// <returns>거리</returns> public double GetDistance(Point startPoint, Point endPoint) { double deltaX = startPoint.X - endPoint.X; double deltaY = startPoint.Y - endPoint.Y; return Math.Sqrt((Math.Pow(Math.Abs(deltaX), 2) + Math.Pow(Math.Abs(deltaY), 2))); } #endregion |
■ 나선을 그리기 위한 좌표들을 계산해서 리스트로 반환하는 방법을 보여준다. ▶ 나선형(Spiral) Point 리스트 구하기 예제 (C#)
|
using System.Collections.Generic; using System.Windows; // 중심점 (300, 300), 반지름 100인 크기의 원에서 30도 간격으로 1440도를 회전하는 나선형 Point 리스트를 구한다. List<Point> spiralPointList = GetSpiralPointList(new Point(300d, 300d), 100d, 30d, 1440d); |
▶ 나선형(Spiral) Point 리스트
더 읽기
■ 원을 그리기 위한 좌표들을 계산해서 리스트로 반환하는 방법을 보여준다. ▶ 원형 Point 리스트 구하기 예제 (C#)
|
using System.Collections.Generic; using System.Windows; // 중심점 (300, 300), 반지름 100인 크기의 원에서 30도 간격의 원형 Point 리스트를 구한다. List<Point> circularPointList = GetCircularPointList(new Point(300d, 300d), 100d, 30d); |
▶ 원형 Point 리스트
더 읽기
■ TreeViewItem 클래스의 Expanded 이벤트와 TreeView 클래스의 MouseUp 이벤트를 사용해 트리뷰 노드 확장시 커서를 대기 커서로 표시하는 방법을 보여준다. ▶ 예제 코드
더 읽기