Я пытаюсь найти обходной путь для этой проблемы.Какая у нас проблема?Проблема в том, что в режиме проектирования Uri
"/UBP.Documents.RWS;component/Resources/ThirdPartyDocumentResourceDictionary.xaml"
является правильным
, но во время выполнения мы должны заменить его на
"/UBP.Documents.RWS;component/ThirdPartyDocumentResourceDictionary.xaml"
Возможно ли сделать это автоматически?И вот о чем я думаю: я хочу сделать класс MyResourceDictionary унаследованным от стандартного ResourceDictionary и сделать подстановки в зависимости от того, находимся ли мы в DesignTime или нет.
Примерный код выглядит следующим образом:
public class MyResourceDictionary : ResourceDictionary
{
new public Uri Source
{
get
{
return base.Source;
}
set
{
if (DesignerProperties.GetIsInDesignMode(new DependencyObject()))
{
base.Source = value;
}
else
{
string originalString = value.OriginalString;
string newString = originalString.Substring(0, originalString.IndexOf(";component") + 11) + originalString.Substring(originalString.LastIndexOf("/") + 1);
base.Source = new Uri(newString, UriKind.Relative);
base.Source = value;
}
}
}
}
Xaml выглядит как
<ResourceDictionary.MergedDictionaries>
<localconverters:MyResourceDictionary Source="/UBP.Documents.RWS;component/Resources/ThirdPartyDocumentResourceDictionary.xaml" />
</ResourceDictionary.MergedDictionaries>
, и во время выполнения это работает, но не в режиме разработки (((Следующее, что я отключил в режиме отладки дизайна, что в сеттере в строке
base.Source = value;
происходит исключение, оно говорит: "Префикс URI не распознан".
Мне интересно, что находится в моем "значении":
"markup://1/file:///D:/Svn/2.08.0016_20121116/Development/Sources/Universal/UBP.Documents.RWS/Presentation/ProbateCaseView.xaml%230//UBP.Documents.RWS;component/Resources/ThirdPartyDocumentResourceDictionary.xaml}".
Это не то, что я долженсм. (может быть из-за моих элементарных знаний о классе Uri).
Я вижу, кроме моего пути к словарю ресурсов ("/UBP.Documents.RWS;component/Resources/ThirdPartyDocumentResourceDictionary.xaml") естьпрефикс с путем к файлу XAML моего приложения, где написана эта строка. Может ли кто-нибудь объяснить мне, как преобразовать этот Uri в мой относительный Uri, основываясь на строке
"/UBP.Documents.RWS;component/Resources/ThirdPartyDocumentResourceDictionary.xaml"
Или, может быть, вы могли бы обидетьболее элегантное решение?