2016-09-22 4 views
0

Я создал класс ImageResourceExtension в под общим именем Assembly. Я проверил имя в настройках окна «Ссылка в свойствах». Пространство имен для этого расширения - Extension.Common.Xamarin Form: Пользовательское расширение не найдено

Часть XAML рабочего проекта, который с помощью этой общей сборки имеет декларацию:

xmlns:common="clr-namespace:Extension.Common;assembly:Common" 

был написан элемент, как:

<common:BooleanToObjectConverter x:Key="boolToStyleImage" 
               x:TypeArguments="Style"> 
     <common:BooleanToObjectConverter.FalseObject> 
      <Style TargetType="Image"> 
      <Setter Property="HeightRequest" Value="20" /> 
      <Setter Property="Source" Value="{common:ImageResource Common.Images.error.png}" /> 
      </Style> 
     </common:BooleanToObjectConverter.FalseObject> 

Изображения был сохранен в общей папке проекта внутри Каталог изображений

Я назвал файл ImageResource как ImageResourceExtension.cs и попробовал ImageResource.cs, но ни один из них не работает. Это как раз дает мне поговорку исключение:

MarkupExtension не найдено для общего: ImageResource

Я понятия не имею, что пойдет не так. Следуйте всем шагам для блога.

Проект, в котором я разместил эти материалы xaml, находится в совместном проекте. Не знаю, не имеет значения

ответ

1

Надеюсь, я хорошо понимаю ваш вопрос!

посмотреть на этот код:

[ContentProperty("Source")] 
public class ImageSourceExtension : IMarkupExtension 
{ 
    public string Source { get; set; } 

    public object ProvideValue(IServiceProvider serviceProvider) 
    { 
     if (Source == null) 
     { 
      return null; 
     } 
     // Do your translation lookup here, using whatever method you require 
     var imageSource = ImageSource.FromResource("Project.Images." + Source); 

     return imageSource; 
    } 
} 

Теперь, если вы хотите использовать изображение, как вы делали в вашем XAML, что-то подобное должно работать:

<Image Source="{extension:ImageSource LogoProject.png}"/> 

Примечание 1: Я только поместил название изображения, потому что в расширении путь автоматически ставится;)

Примечание 2: Вы должны поставить сборку/пространство имен, как я ниже:

xmlns:extension="clr-namespace:Project.Sources.Extensions;assembly=Project" 

Кроме того, вы изображение должно быть EmbeddedResource, не забывайте об этом. Для пути, это Project.Path.Image.png и не монтаж, а;)

Я надеюсь, что я понял ваш вопрос, и я мог бы вам помочь :)

+1

Nice объяснение .. Я не использую этот способ на моей функции больше так может Легко протестировать, но все же очень полезно. спасибо – LittleFunny

Смежные вопросы