我有一個自定義的控制,這與它的來源性的圖像元素暴露給用戶,這樣的引用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組件?