Я нашел довольно хороший обходной путь для этой проблемы, поскольку она, кажется, не была исправлена в Blend 4:
В конструкторе для вашего пользовательского элемента управления XAML просто добавьте необходимые ресурсы,при условии, что вы находитесь в режиме разработки в 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();
}
Могут быть некоторые крайние случаи, но для меня это работает нормально в тех простых случаях, когда раньше я получал большой красный символ ошибки.Мне очень хотелось бы увидеть предложения о том, как лучше решить эту проблему, но это по крайней мере позволяет мне анимировать пользовательские элементы управления, которые в противном случае выглядят как ошибки.
Вы также можете извлечь создание ресурсов для * 1008.*:
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);
}