Прекрасное выполнение приложения, но я не видел свой дизайн в представлении разработчика.
Это говорит, не Может найти ресурс под названием 'Локатор'. Очевидно, я ничего не изменил в коде, я просто сделал привязку данных с помощью диалогового окна привязки данных...
кто-либо сталкивающийся с той же проблемой?
Есть два известных случая, когда это может произойти.
Если вы переключитесь на Blend до создания приложения, библиотеки DLL еще будут недоступны, и эта ошибка будет видна. Сборка приложения решает проблему.
В Expression Blend есть ошибка, при которой, если вы помещаете пользовательский элемент управления в другой пользовательский элемент управления (или Window в WPF), а внутренний пользовательский элемент управления использует глобальный ресурс, глобальный ресурс не может быть найден. В этом случае вы тоже получите ошибку.
К сожалению, у меня нет обходного пути для второго пункта, так как это ошибка Blend. Я надеюсь, что мы скоро увидим решение для этого, но, похоже, оно все еще присутствует в Blend 4.
Что вы можете сделать, так это
Игнорировать ошибку при работе с внешним пользовательским элементом управления. Когда вы работаете с внутренним пользовательским элементом управления, вы должны видеть данные времени разработки в порядке (я знаю, это не очень удовлетворительно).
Используйте d: DataContext, чтобы временно установить контекст данных времени разработки в Blend.
Надеюсь, это поможет,
Лоран
Я придумал разумно приемлемое решение этой проблемы, так как оно не было исправлено в Blend 4:
В конструкторе XAML UserControl просто добавьте необходимые ресурсы, если вы находитесь в режиме разработки в Blend. Это может быть только локатор, а также стили и конвертеры.
public partial class OrdersControl : UserControl
{
public OrdersControl()
{
// MUST do this BEFORE InitializeComponent()
if (DesignerProperties.GetIsInDesignMode(this))
{
if (AppDomain.CurrentDomain.BaseDirectory.Contains("Blend 4"))
{
// load styles resources
ResourceDictionary rd = new ResourceDictionary();
rd.Source = new Uri(System.IO.Path.Combine(Environment.CurrentDirectory, "Resources/Styles.xaml"), UriKind.Absolute);
Resources.MergedDictionaries.Add(rd);
// load any other resources this control needs such as Converters
Resources.Add("booleanNOTConverter", new BooleanNOTConverter());
}
}
// initialize component
this.InitializeComponent();
}
Могут быть некоторые пограничные случаи, но для меня это работает нормально в простых случаях, где раньше я получал большой красный символ ошибки. Я бы хотел увидеть предложения о том, как лучше решить эту проблему, но это, по крайней мере, позволяет мне анимировать пользовательские элементы управления, которые в противном случае отображаются как ошибки.
Вы также можете извлечь создание ресурсов в App.xaml.cs
:
internal static void CreateStaticResourcesForDesigner(Control element)
{
if (AppDomain.CurrentDomain.BaseDirectory.Contains("Blend 4"))
{
// load styles resources
ResourceDictionary rd = new ResourceDictionary();
rd.Source = new Uri(System.IO.Path.Combine(Environment.CurrentDirectory, "Resources/Styles.xaml"), UriKind.Absolute);
element.Resources.MergedDictionaries.Add(rd);
// load any other resources this control needs
element.Resources.Add("booleanNOTConverter", new BooleanNOTConverter());
}
}
, а затем в элементе управления сделайте это ДО InitializeComponent():
// create local resources
if (DesignerProperties.GetIsInDesignMode(this))
{
App.CreateStaticResourcesForDesigner(this);
}
Примечание. В какой-то момент это перестало работать для меня, и я закончил тем, что жестко запрограммировал путь к Styles.xaml, потому что я получил разочаровался, пытаясь выяснить, в каком каталоге я был.
rd.Source = new Uri(@"R:\TFS-PROJECTS\ProjectWPF\Resources\Styles.xaml", UriKind.Absolute);
Я уверен, что смогу найти правильный путь за 5 минут работы, но попробуйте это, если вы, как и я, не в своем уме!