728x90
반응형
728x170
▶ MainPage.xaml
<Page x:Class="TestProject.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
FontFamily="나눔고딕코딩"
FontSize="16">
<Grid>
<Canvas Margin="50 50 50 120"
Background="Green">
<Rectangle Name="rectangle" Canvas.Left="100" Canvas.Top="100"
Width="300"
Height="300"
Fill="Red" />
</Canvas>
<TextBlock Name="textBlock"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Margin="10 10 0 0" />
<Button Name="runButton"
HorizontalAlignment="Right"
VerticalAlignment="Bottom"
Margin="50"
Width="100"
Height="30"
Content="실행" />
</Grid>
</Page>
728x90
▶ MainPage.xaml.cs
using Windows.Foundation;
using Windows.Graphics.Display;
using Windows.UI.ViewManagement;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Media;
namespace TestProject
{
/// <summary>
/// 메인 페이지
/// </summary>
public sealed partial class MainPage : Page
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainPage()
/// <summary>
/// 생성자
/// </summary>
public MainPage()
{
InitializeComponent();
#region 윈도우 크기를 설정한다.
double width = 800d;
double height = 600d;
double dpi = (double)DisplayInformation.GetForCurrentView().LogicalDpi;
ApplicationView.PreferredLaunchWindowingMode = ApplicationViewWindowingMode.PreferredLaunchViewSize;
Size windowSize = new Size(width * 96d / dpi, height * 96d / dpi);
ApplicationView.PreferredLaunchViewSize = windowSize;
Window.Current.Activate();
ApplicationView.GetForCurrentView().TryResizeView(windowSize);
#endregion
#region 윈도우 제목을 설정한다.
ApplicationView.GetForCurrentView().Title = "UIElement 클래스 : TransformToVisual 메소드를 사용해 엘리먼트 상대/절대 위치 구하기";
#endregion
this.runButton.Click += runButton_Click;
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Private
//////////////////////////////////////////////////////////////////////////////// Event
#region 실행 버튼 클릭시 처리하기 - runButton_Click(sender, e)
/// <summary>
/// 실행 버튼 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void runButton_Click(object sender, RoutedEventArgs e)
{
// Window 클래스 : UIElement에서 파생되지 않았음에 주의한다.
Point relativePoint = GetRelativePoint(Window.Current.Content, this.rectangle);
Point absolutePoint = GetAbsolutePoint(this.rectangle);
this.textBlock.Text = $"상대 좌표 : {relativePoint}\r\n절대 좌표 : {absolutePoint}";
}
#endregion
//////////////////////////////////////////////////////////////////////////////// Function
#region 상대 위치 구하기 - GetRelativePoint(baseElement, sourceElement)
/// <summary>
/// 상대 위치 구하기
/// </summary>
/// <param name="baseElement">기준 엘리먼트</param>
/// <param name="sourceElement">소스 엘리먼트</param>
/// <returns>상대 위치</returns>
private Point GetRelativePoint(UIElement baseElement, UIElement sourceElement)
{
GeneralTransform transform = sourceElement.TransformToVisual(baseElement);
Point relativePoint = transform.TransformPoint(new Point(0, 0));
return relativePoint;
}
#endregion
#region 절대 위치 구하기 - GetAbsolutePoint(sourceElement)
/// <summary>
/// 절대 위치 구하기
/// </summary>
/// <param name="sourceElement">소스 엘리먼트</param>
/// <returns>절대 위치</returns>
private Point GetAbsolutePoint(UIElement sourceElement)
{
Point relativePoint = GetRelativePoint(Window.Current.Content, sourceElement);
double x = relativePoint.X + ApplicationView.GetForCurrentView().VisibleBounds.Left;
double y = relativePoint.Y + ApplicationView.GetForCurrentView().VisibleBounds.Top;
return new Point(x, y);
}
#endregion
}
}
728x90
반응형
그리드형(광고전용)
'C# > UWP' 카테고리의 다른 글
[C#/UWP] 윈도우 디스플레이 모드 구하기 (0) | 2021.09.10 |
---|---|
[C#/UWP] TextBlock 엘리먼트 : 아이콘 사용하기 (0) | 2021.09.10 |
[C#/UWP] FontIcon 엘리먼트 : FontFamily/Glyph 속성 사용하기 (0) | 2021.09.10 |
[C#/UWP] FontIcon 엘리먼트 : FontFamily/Glyph 속성 사용하기 (0) | 2021.09.10 |
[C#/UWP] CoreWindow 클래스 : PointerCursor 속성을 사용해 마우스 커서 설정하기 (0) | 2021.08.23 |
[C#/UWP] 백그라운드 태스크 사용하기 (0) | 2021.07.29 |
[C#/UWP] 카메라를 사용해 얼굴 탐지하기 (0) | 2021.07.25 |
[C#/UWP] StorageFile 클래스 사용하기 (0) | 2021.07.24 |
[C#/UWP] 제목 표시줄 뒤로가기 버튼 사용하기 (0) | 2021.07.22 |
[C#/UWP] Calendar 클래스 사용하기 (0) | 2021.07.21 |
댓글을 달아 주세요