Wie zu binden, die mit der dynamischen Ressource und die Angabe eines Pfades
Ich binden wollen, um eine Ressource (DynamicResource) und auf Eigenschaften zugreifen auf die Ressource, aber gibt es eine Möglichkeit, das zu tun?
(Ich visualisieren möchten, um die Standard-Werte aus dem Konstruktor in der xaml-editor in visual studio. Diese können nicht gesehen werden, beim verweisen auf ein Objekt durch DataContext noch durch eine Eigenschaft Hinzugefügt, die auf meine Fenster-Klasse...)
Nicht funktioniert xaml: (Werke, Komponisten, aber nicht während der Laufzeit...)
<Window ... >
<Window.Resources>
<local:MyClass x:Key="myResource" />
</Window.Resources>
<StackPanel>
<Button Content="{Binding Source={DynamicResource myResource} Path=Property1}" />
<Button Content="{Binding Source={DynamicResource myResource} Path=Property2}" />
</StackPanel>
</Window>
mit der Klasse (was wohl die INotifyPropertyChanged implementieren müssen):
public class MyClass
{
public MyClass()
{
this.Property1 = "Ok";
this.Property2 = "Cancel";
}
public string Property1 { get; set; }
public string Property2 { get; set; }
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das ist, weil die
DynamicResource
markup-Erweiterung können nur genutzt werden, auf eine Abhängigkeitseigenschaft, da wird es brauchen, zu aktualisieren, wenn sich die Ressource ändert. UndBinding.Source
ist nicht eine Abhängigkeitseigenschaft...Als Problemumgehung können Sie die
DataContext
des Buttons mit derDynamicResource
:Loaded
Ereignis ausgelöst hat? Auch wenn Sie über die code-behind-api etcTryFindResource()
wird es wieder die erwartete Ressource?Missbrauchen den DataContext von einem fremden Objekt zu sein scheint, die einfachste Lösung.
In Fall müssen Sie noch den DataContext des Steuerelements (MVVM, anyone?), Sie können auch eine unsichtbare Helfer FrameworkElement anderswo:
und später finden Sie es, indem Sie den Namen in der Bindung:
Ihre designer wird sehr wahrscheinlich beschweren sich über nicht in der Lage zu lösen "Farbe" im Rahmen von "Objekt", aber es funktioniert gut, zur Laufzeit.