[C#/WPF] x:Class 속성 사용하기
■ XAML 페이지에 대한 코드 숨김을 제공하는 클래스의 CLR 네임스페이스 및 클래스 이름을 지정한다. ▶ 예제 코드 (XAML)
1 2 3 |
x:Class="MyNamespace.MyClassName" |
■ XAML 페이지에 대한 코드 숨김을 제공하는 클래스의 CLR 네임스페이스 및 클래스 이름을 지정한다. ▶ 예제 코드 (XAML)
1 2 3 |
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 타입을 등록하는 방법을 보여준다. ▶ 등록 정보
1 2 3 |
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#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#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#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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#)
1 2 3 4 5 6 7 |
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#)
1 2 3 4 5 6 7 |
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#)
1 2 3 4 5 6 7 |
using System.Collections.Generic; using System.Windows; // 중심점 (300, 300), 반지름 100인 크기의 원에서 30도 간격의 원형 Point 리스트를 구한다. List<Point> circularPointList = GetCircularPointList(new Point(300d, 300d), 100d, 30d); |
▶ 원형 Point 리스트
■ N각형의 다각형 꼭지점 리스트를 구하는 방법을 보여준다. ▶ 다각형 꼭지점 리스트 구하기 예제 (C#)
1 2 3 4 5 6 |
using System.Collections.Generic; // 중심점 (300, 300), 반지름 100인 크기의 원에서 5각형 꼭지점 리스트를 구한다. List<DoublePoint> polygonVertexList = GetPolygonVertexList(new DoublPeoint(300d, 300d), 100d, 5); |
▶ 다각형 꼭지점 리스트 구하기 (C#)
■ TreeViewItem 클래스의 Expanded 이벤트와 TreeView 클래스의 MouseUp 이벤트를 사용해 트리뷰 노드 확장시 커서를 대기 커서로 표시하는 방법을 보여준다. ▶ 예제 코드
■ Environment 클래스의 OSVersion 정적 속성을 사용해 Windows 운영 체제 버전을 구하는 방법을 보여준다. ▶ 예제 코드 (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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
using System; /// <summary> /// 운영 체제 타입 /// </summary> public enum OperatingSystemType { Unknown , Windows95 , Windows98 , WindowsMe , WindowsNT40 , WindowsNT2000 , WindowsXP , WindowsServer2003, WindowsVista , Windows7 } #region 운영 체제 타입 구하기 - GetOperatingSystemType() /// <summary> /// 운영 체제 타입 구하기 /// </summary> /// <returns>운영 체제 타입</returns> public OperatingSystemType GetOperatingSystemType() { OperatingSystem operatingSystem = Environment.OSVersion; OperatingSystemType operatingSystemType = OperatingSystemType.Unknown; switch(operatingSystem.Platform) { case PlatformID.Win32Windows : if(operatingSystem.Version.Major == 4) { switch(operatingSystem.Version.Minor) { case 0 : operatingSystemType = OperatingSystemType.Windows95; break; case 10 : operatingSystemType = OperatingSystemType.Windows98; break; case 90 : operatingSystemType = OperatingSystemType.WindowsMe; break; } } break; case PlatformID.Win32NT : if(operatingSystem.Version.Major == 4) { operatingSystemType = OperatingSystemType.WindowsNT40; } else if(operatingSystem.Version.Major == 5) { switch(operatingSystem.Version.Minor) { case 0 : operatingSystemType = OperatingSystemType.WindowsNT2000; break; case 1 : operatingSystemType = OperatingSystemType.WindowsXP; break; case 2 : operatingSystemType = OperatingSystemType.WindowsServer2003; break; } } else if(operatingSystem.Version.Major == 6) { switch(operatingSystem.Version.Minor) { case 0 : operatingSystemType = OperatingSystemType.WindowsVista; break; case 1 : operatingSystemType = OperatingSystemType.Windows7; break; } } break; } return operatingSystemType; } #endregion |
■ ManagedInstallerClass 클래스의 InstallHelper 정적 메소드를 사용해 윈도우즈 서비스를 설치하거나 제거하는 방법을 보여준다. ▶ 예제 코드 (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 48 49 50 51 52 53 54 55 56 |
using System; using System.IO; using System.Configuration.Install; #region 프로그램 실행하기 - Main(argumentArray) /// <summary> /// 프로그램 실행하기 /// </summary> /// <param name="argumentArray">인자 배열</param> private static void Main(string[] argumentArray) { if(argumentArray.Length <= 0) { Console.WriteLine("설치 : WindowsServiceInstaller.exe [filename]"); Console.WriteLine("제거 : WindowsServiceInstaller.exe [filename] /u"); } else if(!File.Exists(argumentArray[0])) { Console.WriteLine("파일을 찾을 수 없습니다."); } else if(argumentArray.Length >= 2 && argumentArray[1] == "/u") { try { // 등록된 서비스 제거 ManagedInstallerClass.InstallHelper(new string[] { "/u", argumentArray[0] }); Console.WriteLine("성공적으로 제거되었습니다."); } catch(Exception exception) { Console.WriteLine(exception.Message); } } else { try { // 서비스 등록 ManagedInstallerClass.InstallHelper(new string[] { argumentArray[0] }); Console.WriteLine("성공적으로 설치되었습니다."); } catch(Exception exception) { Console.WriteLine(exception.Message); } } Console.ReadKey(); } #endregion |
■ SystemParametersInfo WIN32 API 함수를 사용해 Form 객체를 트레이 상단에 위치시키는 방법을 보여준다. ▶ 예제 코드 (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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
using System.Drawing; using System.Runtime.InteropServices; using System.Windows.Forms; /// <summary> /// 사각형 /// </summary> [StructLayout(LayoutKind.Sequential)] public struct RECT { /// <summary> /// 왼쪽 /// </summary> public int Left; /// <summary> /// 위쪽 /// </summary> public int Top; /// <summary> /// 오른쪽 /// </summary> public int Right; /// <summary> /// 아래쪽 /// </summary> public int Bottom; } /// <summary> /// 시스템 파라미터 정보 구하기 /// </summary> /// <param name="action">작업</param> /// <param name="parameter">파라미터</param> /// <param name="rect">사각형</param> /// <param name="winINI">WIN.INI 업데이트 플래그</param> /// <returns>처리 결과</returns> [DllImport("user32", CharSet=CharSet.Auto, SetLastError=true)] public static extern int SystemParametersInfo(int action, int parameter, out RECT rect, int winINI); /// <summary> /// SPI_GETWORKAREA /// </summary> private const int SPI_GETWORKAREA = 0x0030; #region 위치 설정하기 - SetLocation(form) /// <summary> /// 위치 설정하기 /// </summary> /// <param name="form">Form 객체</param> public void SetLocation(Form form) { RECT rect = new RECT(); SystemParametersInfo(SPI_GETWORKAREA, 0, out rect, 0); Size size = form.Size; Point location = new Point(rect.Right - form.Width, rect.Bottom - size.Height); form.Location = location; } #endregion |
■ Beep WIN32 API 함수를 사용해 비프음을 발생시키는 방법을 보여준다. ▶ 예제 코드 (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 |
using System.Runtime.InteropServices; /// <summary> /// 비프음 발생하기 /// </summary> /// <param name="frequency">주파수</param> /// <param name="duration">시간(단위 : 1/1000초)</param> [DllImport("kernel32")] public static extern void Beep(int frequency, int duration); // 도 = 256.0Hz // 레 = 도 * 9/8 = 288.0Hz // 미 = 레 * 10/9 = 320.0Hz // 파 = 미 * 16/15 = 341.3Hz // 솔 = 파 * 9/8 = 384.0Hz // 라 = 솔 * 10/9 = 426.6Hz // 시 = 라 * 9/8 = 480.0Hz // 도 = 시 * 16/15 = 512.9Hz ※ 처음 도의 2배 // 2배 = 높은음, 1/2배 = 낮은음 Beep(512, 300); // 도 0.3초 Beep(640, 300); // 미 0.3초 Beep(768, 300); // 솔 0.3초 |
■ Form 클래스의 CheckForIllegalCrossThreadCalls 정적 속성을 사용해 크로스 스레드 예외 발생을 방지하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 |
using System.Windows.Forms; Form.CheckForIllegalCrossThreadCalls = false; |
■ SqlConnection 클래스의 GetSchema 메소드를 사용해 SQL Server 데이타베이스 리스트를 가져오는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 |
using System.Data; using System.Data.SqlClient; SqlConnection sqlConnection = new SqlConnection(); ... DataTable table = sqlConnection.GetSchema("Databases"); |
■ 숫자 데이터 타입의 값을 특정 문자열 포맷으로 변환하는 방법을 보여준다. ▶ 예제 코드 (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 48 49 50 51 52 |
Console.WriteLine("미사용시 : {0}"); Console.WriteLine("----------------------------------------"); Console.WriteLine("[{0}]", 1234.5678); Console.WriteLine(); Console.WriteLine("15자리 오른쪽 정렬 : {0,15}"); Console.WriteLine("----------------------------------------"); Console.WriteLine("[{0,15}]", 1234.5678); Console.WriteLine(); Console.WriteLine("15자리 왼쪽 정렬 : {0,-15}"); Console.WriteLine("----------------------------------------"); Console.WriteLine("[{0,-15}]", 1234.5678); Console.WriteLine(); Console.WriteLine("통화 형식 : {0:c2}"); Console.WriteLine("----------------------------------------"); Console.WriteLine("[{0:c2}]" , 1234.5678); Console.WriteLine(); Console.WriteLine("3자리 콤마 형식 : {0,15:n3}"); Console.WriteLine("----------------------------------------"); Console.WriteLine("[{0,15:n3}]", 1234.5678); Console.WriteLine(); Console.WriteLine("3자리 콤마 형식 : string.Format(\"{0:#,###,###.###}\");"); Console.WriteLine("----------------------------------------"); Console.WriteLine("[{0}]", string.Format("{0:#,###,###.###}", 1234.5678)); Console.WriteLine(); /* 미사용시 : {0} ---------------------------------------- [1234.5678] 15자리 오른쪽 정렬 : {0,15} ---------------------------------------- [ 1234.5678] 15자리 왼쪽 정렬 : {0,-15} ---------------------------------------- [1234.5678 ] 통화 형식 : {0:c2} ---------------------------------------- [\1,234.57] 3자리 콤마 형식 : {0,15:n3} ---------------------------------------- [ 1,234.568] 3자리 콤마 형식 : string.Format("{0:#,###,###.###}"); ---------------------------------------- [1,234.568] */ |