2010-01-01 86 views
2

我有一個自定義的控制,這與它的來源性的圖像元素暴露給用戶,這樣的引用XAML的基礎URI:如何獲得在自定義控制

<ControlTemplate> 
    <Image x:Name="PART_Image" Source="{Binding ImageUri, RelativeSource={RelativeSource TemplatedParent}}"/> 
</ControlTemplate> 

其中ImageUri是財產控制類,如下所示:

public Uri ImageUri { get; set; } 

這種定製控制是在裝配customcontrol.dll,我可以參考和在一個.exe使用此控制,沒有問題,像這樣:

<cc:MyControl ImageUri="/Resources/Image.png" /> 

其中Image.png是.exe項目的資源。

但是,如果我在dll程序集中引用和使用此控件,則存在一個問題,我必須使用絕對「pack:// ...」uri來引用調用dll中的圖像,如果我使用一個像Resources/Image.png這樣的資源不能被加載的相對uri,事實證明,當這個uri應用在Image元素上時,它會解析來自customcontrol.dll的相對uri,而不是調用dll程序集,所以我想這樣做:

public Uri ImageUri { 
    get { ...... } 
    set { 
     if (!value.IsAbsolute) { 
      // Get the assembly name of parent xaml file or code 
      // and construct a "pack://" uri from the assembly name 
      // and value.OriginalString, but how ?????? 
     } 
    } 
} 

如何獲得使用我的自定義控件的XAML代碼的程序集?

如果控件用於代碼中,也許我可以在我的方法中使用GetCallingAssembly,但是如何從我的PresontationCore.dll中調用XAML的東西,我如何才能找出XAML組件?

回答

1

好的我自己找到了解決方案。我應該實現IUriContext接口, ,它只有一個屬性:Uri BaseUri,這正是我想要的。