.NET MAUI - XAML 마크업 확장 (mark-up extensions)
2022. 7. 7. 00:00ㆍMAUI
반응형
XAML 정의의 대부분은 컴파일 시간에 해결된다.
그러나 때로는 속성 값을 런타임에 동적으로 설정해야 한다.
이 값은 프로그램이 실행 중일 때만 알 수 있다.
이러한 상황에서는 런타임에 XAML에 값을 제공할 개체를 만들 수 있다.
XAML은 이를 위해 마크업 확장을 지원한다.
Mark-up extension
마크업확장은 XAML에서 런타임 값에 액세스하는 데 사용하는 클래스이다.
예를 들어 UI 에 여러 Label 이 있고 FontSize 속성을 일관되도록
앱 전체에서 동일한 값으로 설정하려고한다고 가정하자.
<Label Text="Hello, World!"
Grid.Row="0"
SemanticProperties.HeadingLevel="Level1"
FontSize="28"
HorizontalOptions="CenterAndExpand"/>
위와 같이 설정하고 모든 레이블에 반복해서 설정 할 수 있다.
하지만 나중에 값을 변경 하려면 문제가 생긴다.
또는 장치방향, 화면 해상도 같은 것을 고려하여 runtime 에 계산될 수도 있다.
이럴 경우 마크업 확정이 유용하다.
namespace MyMauiApp;
public partial class MainPage : ContentPage
{
public const double MyFontSize = 28;
public MainPage()
{
InitializeComponent();
...
}
...
}
public class GlobalFontSizeExtension : IMarkupExtension
{
public object ProvideValue(IServiceProvider serviceProvider)
{
return MainPage.MyFontSize;
}
}
적용
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:mycode="clr-namespace:MyMauiApp"
x:Class="MyMauiApp.MainPage">
<Label Text="Hello, World!"
Grid.Row="0"
SemanticProperties.HeadingLevel="Level1"
FontSize="{mycode:GlobalFontSize}"
HorizontalOptions="CenterAndExpand"/>
그러나 위와 같은 방식으로 사용하지는 않는다.
.NET MAUI 는 이미 같은 형태의 StaticExtension 을 제공 하고 있다.
[ContentProperty ("Member")]
public class StaticExtension : IMarkupExtension
{
public string Member {get; set;}
public object ProvideValue (IServiceProvider serviceProvider)
{
...
}
}
아래와 같이 사용하면 된다.
<Label Text="Hello, World!"
Grid.Row="0"
SemanticProperties.HeadingLevel="Level1"
FontSize="{x:Static Member=mycode:MainPage.MyFontSize}"
HorizontalOptions="CenterAndExpand"/>
관련영상
반응형
'MAUI' 카테고리의 다른 글
.NET MAUI - XAML View(Control) 의 크기 지정 (0) | 2022.07.11 |
---|---|
.NET MAUI - XAML 플랫폼 특정 값 (Platform-specfic values) (0) | 2022.07.08 |
.NET MAUI - XAML 이벤트 핸들링 (0) | 2022.07.06 |
.NET MAUI - XAML 기본 (0) | 2022.07.05 |
.NET MAUI - XAML 의 동작방식 (0) | 2022.07.04 |