Obsolete긴 하지만 Custom Renderer를 구현하는 방법도 있네요.
Controls 폴더 아래 대상 Label을 사용자 정의로 구현하고, Windows 아래 Renderers 폴더를 만들고 CustomRenderer를 구현합니다.
CustomLabel 코드
public class CustomLabel : Label
{
}
CustomRenderer 코드
[assembly: ExportRenderer(typeof(CustomLabelRenderer), typeof(CustomLabel))]
namespace MauiApp1.WinUI.Renderers
{
public class CustomLabelRenderer : LabelRenderer
{
private Brush _prevForeground;
// I DON'T ACTUALLY NEED OnElementChanged, I USE IT JUST TO SEE IF LABEL GETS CUSTOMIZED IN SOME WAY
protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
{
base.OnElementChanged(e);
if (Control != null)
{
Control.PointerEntered += ControlOnPointerEntered;
Control.PointerExited += ControlOnPointerExited;
}
}
private void ControlOnPointerExited(object sender, PointerRoutedEventArgs e)
{
if (_prevForeground != null)
{
Control.Foreground = _prevForeground;
}
}
private void ControlOnPointerEntered(object sender, PointerRoutedEventArgs e)
{
// MouseHover시 할일
_prevForeground = Control.Foreground;
Control.Foreground = new Microsoft.UI.Xaml.Media.SolidColorBrush(Windows.UI.Color.FromArgb(255, 255, 255, 0));
}
}
}
렌더러 연결
UseMauiCompatibility 함수로 Custom Renderer를 활성화 하고, ConfigureMauiHandlers로 연결합니다.
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.UseMauiCompatibility()
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
})
.ConfigureMauiHandlers((h) =>
{
#if WINDOWS
h.AddCompatibilityRenderer(typeof(CustomLabel), typeof(CustomLabelRenderer));
#endif
});
return builder.Build();
}
사용법
사용할 땐 커스텀 label을 선언 해주시면 됩니다.
<local:CustomLabel
Text="Hello, World!"
SemanticProperties.HeadingLevel="Level1"
FontSize="32"
HorizontalOptions="Center" />