@inject ImageCacheService ImageCache @if (_loading) { } else if (!string.IsNullOrWhiteSpace(_resolvedSrc)) { } else if (!string.IsNullOrWhiteSpace(Fallback)) {
} @code { /// مسیر تصویر (نسبی، data-URI، یا http) [Parameter] public string? Path { get; set; } /// متن جایگزین [Parameter] public string? Alt { get; set; } /// نحوه جایگیری تصویر [Parameter] public ObjectFit ObjectFit { get; set; } = ObjectFit.Cover; /// موقعیت تصویر [Parameter] public ObjectPosition ObjectPosition { get; set; } = ObjectPosition.Center; /// سایه تصویر [Parameter] public int Elevation { get; set; } /// تصویر سیال (100% عرض) [Parameter] public bool Fluid { get; set; } /// استایل inline [Parameter] public string? Style { get; set; } /// کلاس CSS [Parameter] public string? Class { get; set; } /// عرض تصویر (پیکسل) — مانند MudImage [Parameter] public int? ImgWidth { get; set; } /// ارتفاع تصویر (پیکسل) — مانند MudImage [Parameter] public int? ImgHeight { get; set; } /// عرض placeholder skeleton (مقدار CSS) [Parameter] public string? SkeletonWidth { get; set; } /// ارتفاع placeholder skeleton (مقدار CSS) [Parameter] public string? SkeletonHeight { get; set; } /// آیکون fallback هنگام عدم وجود تصویر [Parameter] public string? Fallback { get; set; } private string? _resolvedSrc; private bool _loading; private string? _lastPath; protected override async Task OnParametersSetAsync() { // فقط وقتی Path تغییر کرده، resolve مجدد انجام شود if (Path == _lastPath) return; _lastPath = Path; if (string.IsNullOrWhiteSpace(Path)) { _resolvedSrc = null; _loading = false; return; } // اگر قبلاً base64 هست → نمایش فوری if (Path.StartsWith("data:", StringComparison.Ordinal)) { _resolvedSrc = Path; _loading = false; return; } _loading = true; StateHasChanged(); _resolvedSrc = await ImageCache.ResolveAsync(Path); _loading = false; } }