728x90
반응형
728x170
▶ ImageResourceExtension.cs
using System.Reflection;
using System.Xml;
namespace TestProject;
/// <summary>
/// 이미지 리소스 확장
/// </summary>
[ContentProperty("Source")]
public class ImageResourceExtension : IMarkupExtension<ImageSource>
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Property
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 소스 - Source
/// <summary>
/// 소스
/// </summary>
public string Source { set; get; }
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 값 제공하기 - ProvideValue(serviceProvider)
/// <summary>
/// 값 제공하기
/// </summary>
/// <param name="serviceProvider">서비스 제공자</param>
/// <returns>이미지 소스</returns>
/// <exception cref="XamlParseException"></exception>
public ImageSource ProvideValue(IServiceProvider serviceProvider)
{
if(string.IsNullOrEmpty(Source))
{
IXmlLineInfoProvider lineInfoProvider = serviceProvider.GetService(typeof(IXmlLineInfoProvider)) as IXmlLineInfoProvider;
IXmlLineInfo lineInfo = (lineInfoProvider != null) ? lineInfoProvider.XmlLineInfo : new XmlLineInfo();
throw new XamlParseException("ImageResourceExtension requires Source property to be set", lineInfo);
}
string assemblyName = GetType().GetTypeInfo().Assembly.GetName().Name;
return ImageSource.FromResource($"{assemblyName}.{Source}", typeof(ImageResourceExtension).GetTypeInfo().Assembly);
}
#endregion
#region 값 제공하기 - IMarkupExtension.ProvideValue(serviceProvider)
/// <summary>
/// 값 제공하기
/// </summary>
/// <param name="serviceProvider">서비스 제공자</param>
/// <returns>마크업 확장 인터페이스</returns>
object IMarkupExtension.ProvideValue(IServiceProvider serviceProvider)
{
return (this as IMarkupExtension<ImageSource>).ProvideValue(serviceProvider);
}
#endregion
}
728x90
▶ MainPage.xaml
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage x:Class="TestProject.MainPage"
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:TestProject">
<Image
WidthRequest="300"
Source="{local:ImageResource IMAGE.sample.jpg}" />
</ContentPage>
728x90
반응형
그리드형(광고전용)
'C# > MAUI' 카테고리의 다른 글
[C#/MAUI/.NET6] Label 엘리먼트 : Text 속성을 사용해 문자열 개행하기 (0) | 2022.05.15 |
---|---|
[C#/MAUI/.NET6] Label 엘리먼트 : 유니코드 개행 문자 사용하기 (0) | 2022.05.15 |
[C#/MAUI/.NET6] Label 엘리먼트 : CharacterSpacing 속성 사용하기 (0) | 2022.05.15 |
[C#/MAUI/.NET6] Image 클래스 : IsAnimationPlaying 속성을 사용해 GIF 이미지 애니메이션 만들기 (0) | 2022.05.14 |
[C#/MAUI/.NET6] ImageSource 클래스 : FromStream 정적 메소드를 사용해 이미지 스트림 로드하기 (0) | 2022.05.14 |
[C#/MAUI/.NET6] ImageSource 클래스 : FromResource 정적 메소드를 사용해 다른 어셈블리의 포함 리소스 이미지 로드하기 (0) | 2022.05.14 |
[C#/MAUI/.NET6] ImageSource 클래스 : FromResource 정적 메소드를 사용해 포함 리소스 이미지 로드하기 (0) | 2022.05.14 |
[C#/MAUI/.NET6] Image 엘리먼트 : Source 속성에서 원격 이미지 로드시 이미지 캐싱 사용하기 (0) | 2022.05.14 |
[C#/MAUI/.NET6] Image 클래스 : Source 속성을 사용해 이미지 소스 암시적 변환하기 (0) | 2022.05.14 |
[C#/MAUI/.NET6] ImageSource 클래스 : FromUri 정적 메소드를 사용해 원격 이미지 로드하기 (0) | 2022.05.14 |
댓글을 달아 주세요