Ich habe mit einer einigermaßen akzeptable Lösung für dieses Problem kommen, da es nicht in Mischung 4 behoben wurde scheint zu:
Fügen Sie im Konstruktor für Ihr XAML-Benutzersteuerelement einfach die erforderlichen Ressourcen hinzu, vorausgesetzt, Sie befinden sich im Entwurfsmodus in Blend. Dies kann nur der Locator oder auch Styles und Konverter sein.
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();
}
Es kann einige Grenzfälle sein, aber seine Arbeit für mich OK in den einfachen Fällen, in denen ich vor ein großes rotes Fehlersymbol bekommen würde. Ich würde gerne sehen, wie man dieses Problem besser lösen kann, aber das erlaubt mir zumindest, Benutzersteuerungen zu animieren, die sonst als Fehler erscheinen.
Sie könnten auch die Schaffung von Ressourcen extrahieren, um 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());
}
}
und dann in der Steuer dies tun, bevor InitializeComponent():
// create local resources
if (DesignerProperties.GetIsInDesignMode(this))
{
App.CreateStaticResourcesForDesigner(this);
}
Hinweis: Irgendwann hörte das für mich auf zu arbeiten und ich habe den Pfad zu Styles.xaml beca hartkodiert benutze ich habe, um herauszufinden, frustriert versuchen, welches Verzeichnis ich war.
rd.Source = new Uri(@"R:\TFS-PROJECTS\ProjectWPF\Resources\Styles.xaml", UriKind.Absolute);
Ich bin sicher, dass ich den richtigen Weg mit 5 Minuten Arbeit finden konnte, aber versuchen Sie dies, wenn Sie auf Ihrem Verstand sind am Ende, wie ich war !
sehr überrascht, diese Frage hat keine Favoriten oder upvotes überhaupt !! –
Als jemand, der meistens in Mischung arbeitet, macht mich das jemanden erstechen wollen ... – BentOnCoding
Ich hatte dieses Problem in Visual Studio 2011 und löste es, indem ich das Problem '{StaticResource Foo}' in '{DynamicResource Foo}' änderte. Hoffe, das hilft jemandem. – Tower