2016-09-22 53 views
0

我在Common Assembly名稱下創建了ImageResourceExtension類。我在「參考資料」窗口設置下檢查了名稱。這個擴展的命名空間是Extension.Common。Xamarin窗體:自定義擴展找不到

其使用此公用大會的工作項目的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

尼斯解釋。我不要我的功能再使用這種方式等都可以不容易測試,但仍然非常有用。謝謝 – LittleFunny