2017-01-03 2 views
2

У меня есть пользовательский контроль в общем проекте (resource dictionary in shared project).Дизайнер XAML не может найти ресурс

Все отлично работает в режиме исполнения, XAML дизайнер однако бросает исключение:

Не удается найти ресурс 'mycontrol.xaml'.

Проблема возникает, когда стиль загрузки для управления:

public class MyControl: Control 
{ 
    public MyControl() 
    { 
     Resources = new ResourceDictionary() { Source = new Uri("pack://application:,,,/mycontrol.xaml") }; 
     Style = (Style)Resources["somekey"]; 
    } 
} 

Почему это работает во время выполнения и не во время разработки?

Я могу определить время разработки, но что тогда делать?

ответ

4

У дизайнера WPF возникает проблема при загрузке xaml-файлов из других проектов. Не могли бы вы пытаетесь загрузить файл XAML, используя эту аннотацию:

pack://application:,,,/PROJECTNAMESPACE;component/mycontrol.xaml 
+0

Если ресурс находится в той же сборке, вам не нужно указать пространство имен. Посмотрите https://msdn.microsoft.com/en-US/library/aa970069(v=vs.110).aspx#Resource URI файлов файлов – c0d3b34n

+0

К моему большому удивлению, этот синтаксис делает дизайнера счастливым. Я использовал его раньше, но он требовал сборки, которая в случае совместного проекта является проблемой, но не вашей проблемой;). Благодарю. – Sinatr

0

Я хотел бы попробовать

Uri res = new Uri("pack://siteoforigin:,,,/mycontrol.xaml", UriKind.Relative); 
Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = res }); 
+0

Это определенно неверно, так как 'siteoforigin' является * URI пакета для файла исходного файла XAML, хранящегося в месте, из которого запускается исполняемая сборка * ([msdn] (https://msdn.microsoft.com/ru -us/library/aa970069 (v = vs.110) .aspx)), если вы также не предлагаете хранить xaml извне. – Sinatr

+0

aaaaah, моя вина ... :-) – c0d3b34n

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

  • Нет связанных вопросов^_^