■ Compositor 클래스를 사용해 사각형에 그림자 효과를 그리는 방법을 보여준다. ▶ MainPage.xaml
|
<?xml version="1.0" encoding="utf-8"?> <Page x:Class="TestProject.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mgcux="using:Microsoft.Graphics.Canvas.UI.Xaml" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" FontFamily="나눔고딕코딩" FontSize="16"> <Grid Name="grid" /> </Page> |
▶ MainPage.xaml.cs
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.Numerics; using Microsoft.UI; using Microsoft.UI.Composition; using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Hosting; namespace TestProject; /// <summary> /// 메인 페이지 /// </summary> public sealed partial class MainPage : Page { //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor ////////////////////////////////////////////////////////////////////////////////////////// Public #region 생성자 - MainPage() /// <summary> /// 생성자 /// </summary> public MainPage() { this.InitializeComponent(); Visual gridVisual = ElementCompositionPreview.GetElementVisual(this.grid); Compositor compositor = gridVisual.Compositor; CompositionColorBrush compositionColorBrush = compositor.CreateColorBrush(Colors.Blue); DropShadow dropShadow = compositor.CreateDropShadow(); dropShadow.BlurRadius = 15.0f; dropShadow.Offset = new Vector3(10, 10, 0); dropShadow.Color = Colors.Black; SpriteVisual spriteVisual = compositor.CreateSpriteVisual(); spriteVisual.Size = new Vector2(200, 200); spriteVisual.Offset = new Vector3(100, 100, 0); spriteVisual.Brush = compositionColorBrush; spriteVisual.Shadow = dropShadow; ContainerVisual containerVisual = compositor.CreateContainerVisual(); containerVisual.Children.InsertAtTop(spriteVisual); ElementCompositionPreview.SetElementChildVisual(this.grid, containerVisual); } #endregion } |
TestProject.zip
■ ContainerVisual 클래스의 Children 속성에서 VisualCollection 객체의 InsertAtTop 메소드를 사용해 자식 비주얼을 제일 앞에 추가하는 방법을 보여준다. ▶ 예제 코드 (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
|
using System.Numerics; using Microsoft.UI; using Microsoft.UI.Composition; using Microsoft.UI.Xaml.Hosting; // ... Grid grid; // ... Visual gridVisual = ElementCompositionPreview.GetElementVisual(grid); Compositor compositor = gridVisual.Compositor; CompositionColorBrush compositionColorBrush = compositor.CreateColorBrush(Colors.Blue); DropShadow dropShadow = compositor.CreateDropShadow(); dropShadow.BlurRadius = 15.0f; dropShadow.Offset = new Vector3(10, 10, 0); dropShadow.Color = Colors.Black; SpriteVisual spriteVisual = compositor.CreateSpriteVisual(); spriteVisual.Size = new Vector2(200, 200); spriteVisual.Offset = new Vector3(100, 100, 0); spriteVisual.Brush = compositionColorBrush; spriteVisual.Shadow = dropShadow; ContainerVisual containerVisual = compositor.CreateContainerVisual(); containerVisual.Children.InsertAtTop(spriteVisual); ElementCompositionPreview.SetElementChildVisual(this.grid, containerVisual); |
■ DropShadow 클래스의 BlurRadius/Offset/Color 속성을 사용하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
using Microsoft.UI; using Microsoft.UI.Composition; using Microsoft.UI.Xaml.Hosting; // ... Grid grid; // ... Visual gridVisual = ElementCompositionPreview.GetElementVisual(grid); Compositor compositor = gridVisual.Compositor; DropShadow dropShadow = compositor.CreateDropShadow(); dropShadow.BlurRadius = 15.0f; dropShadow.Offset = new Vector3(10, 10, 0); dropShadow.Color = Colors.Black; |
■ Compositor 클래스의 CreateDropShadow 메소드를 사용해 DropShadow 객체를 만드는 방법을 보여준다. ▶ 예제 코드 (C#)
|
using Microsoft.UI.Composition; using Microsoft.UI.Xaml.Hosting; // ... Grid grid; // ... Visual gridVisual = ElementCompositionPreview.GetElementVisual(grid); Compositor compositor = gridVisual.Compositor; DropShadow dropShadow = compositor.CreateDropShadow(); |
■ Compositor 클래스의 CreateColorBrush 메소드를 사용해 CompositionColorBrush 객체를 만드는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
using System.Numerics; using Microsoft.UI; using Microsoft.UI.Composition; using Microsoft.UI.Xaml.Hosting; // ... Grid grid; // ... Visual gridVisual = ElementCompositionPreview.GetElementVisual(grid); Compositor compositor = gridVisual.Compositor; CompositionColorBrush compositionColorBrush = compositor.CreateColorBrush(Colors.Blue); |
■ SpriteVisual 클래스의 Size/Offset/Brush/Shadow 속성을 사용하는 방법을 보여준다. ▶ 예제 코드 (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
|
using System.Numerics; using Microsoft.UI; using Microsoft.UI.Composition; using Microsoft.UI.Xaml.Hosting; // ... Grid grid; // ... Visual gridVisual = ElementCompositionPreview.GetElementVisual(this.grid); Compositor compositor = gridVisual.Compositor; CompositionColorBrush compositionColorBrush = compositor.CreateColorBrush(Colors.Blue); DropShadow dropShadow = compositor.CreateDropShadow(); dropShadow.BlurRadius = 15.0f; dropShadow.Offset = new Vector3(10, 10, 0); dropShadow.Color = Colors.Black; SpriteVisual spriteVisual = compositor.CreateSpriteVisual(); spriteVisual.Size = new Vector2(200, 200); spriteVisual.Offset = new Vector3(100, 100, 0); spriteVisual.Brush = compositionColorBrush; spriteVisual.Shadow = dropShadow; |
■ Compositor 클래스의 CreateContainerVisual 메소드를 사용해 ContainerVisual 객체를 만드는 방법을 보여준다. ▶ 예제 코드 (C#)
|
using Microsoft.UI.Composition; using Microsoft.UI.Xaml.Hosting; // ... Grid grid; // ... Visual gridVisual = ElementCompositionPreview.GetElementVisual(this.grid); Compositor compositor = gridVisual.Compositor; ContainerVisual containerVisual = compositor.CreateContainerVisual(); |
■ CanvasControl 클래스의 Draw 이벤트를 사용해 그림자 효과를 그리는 방법을 보여준다. ※ 비주얼 스튜디오에서 TestProject(Unpackaged) 모드로 빌드한다. ※ TestProject.csproj 프로젝트 파일에서 WindowsPackageType
더 읽기
■ IconSourceElement 엘리먼트의 IconSource 속성에서 FontIconSource 엘리먼트를 설정해 폰트 아이콘을 표시하는 방법을 보여준다. ※ 비주얼 스튜디오에서 TestProject(Unpackaged) 모드로 빌드한다. ※ TestProject.csproj 프로젝트
더 읽기
■ SymbolIcon 엘리먼트의 Symbol 속성을 사용해 심볼 아이콘을 표시하는 방법을 보여준다. ※ 비주얼 스튜디오에서 TestProject(Unpackaged) 모드로 빌드한다. ※ TestProject.csproj 프로젝트 파일에서 WindowsPackageType
더 읽기
■ Button 엘리먼트의 FontFamily/Content 속성을 사용해 아이콘을 표시하는 방법을 보여준다. ※ 비주얼 스튜디오에서 TestProject(Unpackaged) 모드로 빌드한다. ※ TestProject.csproj 프로젝트 파일에서 WindowsPackageType 태그를
더 읽기
■ TaskCompletionSource<T> 클래스의 SetResult 메소드/Task 속성을 사용해 비동기 작업을 처리하는 방법을 보여준다. ▶ Program.cs
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
|
using System; using System.Threading; using System.Threading.Tasks; namespace TestProject; /// <summary> /// 프로그램 /// </summary> class Program { //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Static //////////////////////////////////////////////////////////////////////////////// Private #region 작업 처리하기 - ProcessOperationAsync() /// <summary> /// 작업 처리하기 /// </summary> /// <returns>작업 처리 결과 태스크</returns> private static Task<int> ProcessOperationAsync() { TaskCompletionSource<int> taskCompletionSource = new TaskCompletionSource<int>(); Task.Run ( async () => { int mainThreadID = Thread.CurrentThread.ManagedThreadId; Console.WriteLine($"[{DateTime.Now.ToString("HH:mm:ss")}] 스레드 ID : {mainThreadID}, 비동기 작업 시작"); await Task.Delay(3000); taskCompletionSource.SetResult(42); Console.WriteLine($"[{DateTime.Now.ToString("HH:mm:ss")}] 스레드 ID : {mainThreadID}, 비동기 작업 완료"); } ); return taskCompletionSource.Task; } #endregion #region 프로그램 시작하기 - Main() /// <summary> /// 프로그램 시작하기 /// </summary> /// <returns>태스크</returns> private static async Task Main() { int mainThreadID = Thread.CurrentThread.ManagedThreadId; Console.WriteLine($"[{DateTime.Now.ToString("HH:mm:ss")}] 스레드 ID : {mainThreadID}, 프로그램 시작"); Task<int> task = ProcessOperationAsync(); for(int i = 0; i < 50; i++) { Console.WriteLine($"[{DateTime.Now.ToString("HH:mm:ss")}] 스레드 ID : {mainThreadID}, 항목 {i}"); await Task.Delay(100); } int result = await task; Console.WriteLine($"[{DateTime.Now.ToString("HH:mm:ss")}] 스레드 ID : {mainThreadID}, 비동기 작업 결과 : {result}"); Console.WriteLine($"[{DateTime.Now.ToString("HH:mm:ss")}] 스레드 ID : {mainThreadID}, 프로그램 종료"); } #endregion } |
TestProject.zip
■ TeachingTip 엘리먼트의 PlacementMargin/PreferredPlacement/TailVisibility 속성을 사용해 Target 속성 설정없이 티칭팁 표시하기 ※ 비주얼 스튜디오에서 TestProject(Unpackaged) 모드로 빌드한다. ※ TestProject.csproj 프로젝트 파일에서 WindowsPackageType
더 읽기
■ Flyout 엘리먼트의 OverlayInputPassThroughElement 속성을 사용해 플라이웃 오픈시 특정 UI 엘리먼의에 대한 입력을 허용하는 방법을 보여준다. ※ 비주얼 스튜디오에서 TestProject(Unpackaged) 모드로 빌드한다.
더 읽기
■ Flyout 엘리먼트의 LightDismissOverlayMode 속성을 사용해 빠른 해제 오버레이 모드를 설정하는 방법을 보여준다. ※ 비주얼 스튜디오에서 TestProject(Unpackaged) 모드로 빌드한다. ※ TestProject.csproj 프로젝트
더 읽기
■ Flyout 엘리먼트의 FlyoutPresenterStyle 속성을 사용해 플라이아웃 프리젠터 스타일을 설정하는 방법을 보여준다. ※ 비주얼 스튜디오에서 TestProject(Unpackaged) 모드로 빌드한다. ※ TestProject.csproj 프로젝트 파일에서
더 읽기
■ FlyoutBase 엘리먼트의 AttachedFlyout 첨부 속성을 사용해 Flyout 엘리먼트를 설정하는 방법을 보여준다. ※ 비주얼 스튜디오에서 TestProject(Unpackaged) 모드로 빌드한다. ※ TestProject.csproj 프로젝트 파일에서
더 읽기
■ FlyoutBase 엘리먼트의 AttachedFlyout 첨부 속성을 사용해 Flyout 엘리먼트를 설정하는 방법을 보여준다. ※ 비주얼 스튜디오에서 TestProject(Unpackaged) 모드로 빌드한다. ※ TestProject.csproj 프로젝트 파일에서
더 읽기
■ ApiInformation 클래스의 IsApiContractPresent 정적 메소드를 사용해 Windows.Foundation.UniversalApiContract 버전 8 이상 여부를 구하는 방법을 보여준다. ▶ 예제 코드 (C#)
|
using Windows.Foundation.Metadata; if(ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 8)) { // 작업을 처리한다. } |
■ VisualTreeHelper 클래스의 GetParent 정적 메소드를 사용해 조상 의존 객체 여부를 구하는 방법을 보여준다. ▶ 예제 코드 (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
|
using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Media; #region 조상 여부 구하기 - IsAncestorOf(parent, child) /// <summary> /// 조상 여부 구하기 /// </summary> /// <param name="parent">부모 의존 객체</param> /// <param name="child">자식 의존 객체</param> /// <returns>조상 여부</returns> public bool IsAncestorOf(DependencyObject parent, DependencyObject child) { DependencyObject current = child; bool isAncestor = false; while(current != null && !isAncestor) { if(current == parent) { isAncestor = true; } current = VisualTreeHelper.GetParent(current); } return isAncestor; } #endregion |
■ ListView 클래스의 ContainerContentChanging 이벤트를 사용해 컨테이너 컨텐트 변경시 처리하는 방법을 보여준다. ※ 비주얼 스튜디오에서 TestProject(Unpackaged) 모드로 빌드한다. ※ TestProject.csproj 프로젝트 파일에서
더 읽기
■ ListView 클래스의 ItemsSource 속성에서 필터 처리한 컬렉션을 설정하는 방법을 보여준다. ※ 비주얼 스튜디오에서 TestProject(Unpackaged) 모드로 빌드한다. ※ TestProject.csproj 프로젝트 파일에서 WindowsPackageType
더 읽기
■ SwipeItems 엘리먼트의 Mode 속성을 사용해 표시(Reveal)/실행(Execute) 모드를 설정하는 방법을 보여준다. ※ 비주얼 스튜디오에서 TestProject(Unpackaged) 모드로 빌드한다. ※ TestProject.csproj 프로젝트 파일에서 WindowsPackageType
더 읽기
■ WebView2 클래스의 CoreWebView2 속성에서 CoreWebView2 객체의 ExecuteScriptAsync 메소드를 사용해 자바 스크립트를 실행하는 방법을 보여준다. ▶ HTML 구하기 (C#)
|
using System.Text.Json; using System.Threading.Tasks; using Microsoft.UI.Xaml.Controls; // ... WebView2 webView2; // ... string html = await webView2.CoreWebView2.ExecuteScriptAsync("document.documentElement.outerHTML"); html = JsonSerializer.Deserialize<string>(html); |
▶ 본문
더 읽기
■ WebView2 클래스에서 웹 페이지의 HTML을 클립보드에 복사하는 방법을 보여준다. ※ 비주얼 스튜디오에서 TestProject(Unpackaged) 모드로 빌드한다. ※ TestProject.csproj 프로젝트 파일에서 WindowsPackageType 태그를
더 읽기