it-swarm.com.de

Wie kann ich in Wpf auf ResourceDictionary über C # -Code zugreifen?

Ich habe eine DataTemplate in einer xaml-Datei definiert, auf die ich über C # -Code zugreifen möchte .. __ Kann mir jemand sagen, wie ich darauf zugreifen kann? ____ Ich habe eine neue ResourceDictionary-Datei hinzugefügt und der Name ist Dictionary1.xaml. Ich habe eine Datenvorlage wie:

<ResourceDictionary xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml">
    <DataTemplate x:Key="mytemplate">
        <TextBlock Text="Name:" Background="Blue"/>
    </DataTemplate>
</ResourceDictionary>

nicht Ich habe eine ListBox namens listBox1 und ich möchte sie der Itemtemplate-Eigenschaft .__ zuweisen. Aber ich verstehe nicht, wie ich das machen kann?

59
Embedd_Khurja

Wo genau definieren Sie es? 

Wenn Sie es im ResourceDictionary Ihres Objekts definieren, dann 

Application.Current.Resources[typeof(yourDataTemplateTargetType)] 

sollte arbeiten. Wenn Sie es als Member von etwas anderem definieren, wie zum Beispiel einem ItemsControl, müssen Sie ein Handle für die ItemsControl-Instanz aufrufen und die ItemTemplate-Eigenschaft aufrufen.

Edit: Ok, ich denke wir kommen irgendwo hin. Sie definieren also ein ResourceDictionary in einer eigenen Datei. Bevor Sie es in Ihrer Benutzeroberfläche verwenden und von Ihrem Code dahinter darauf zugreifen können, müssen Sie dieses ResourceDictionary mit Ihrer Anwendung zusammenführen. Machst du das?

Wenn Sie sind, ist der nächste Schritt, diese Ressource zu erhalten. Jedes FrameworkElement hat eine Methode namens FindResource . Diese Methode ist großartig, da sie in der ResourceDictionary-Struktur nach oben geht und versucht, die Ressource mit dem Schlüssel zu finden. Wenn Sie also von einem UserControl auf diese Ressource zugreifen möchten, können Sie im Code dahinter Folgendes tun:

FindResource(typeof(yourDataTemplateTargetType));

Wenn dies für Sie nicht funktioniert, zeigen Sie uns bitte genau, wie Sie dieses Ressourcenwörterbuch deklarieren und wie es in die Ressourcen Ihrer Anwendung eingebunden wird.

53
Szymon Rozga

Da Application.Current in meinem Fall null war, habe ich Folgendes verwendet:

    var myResourceDictionary = new ResourceDictionary();
    myResourceDictionary.Source =
        new Uri("/DllName;component/Resources/MyResourceDictionary.xaml",
                UriKind.RelativeOrAbsolute);  

und dann den angegebenen Schlüssel mit myResourceDictionary["KeyName"] as TypeOfItem abrufen

( Quelle )

52
itsho

Wenn Sie beispielsweise eine Vorlage für Button in Ihrem Ressourcenwörterbuch in der Datei App.xaml haben, können Sie mit dem folgenden Code darauf zugreifen:

Application.Current.Resources[typeof(Button)]
7

Sie können wie folgt auf ein Ressourcenwörterbuch zugreifen, das Sie zu Ihrem Projekt hinzugefügt haben:

var rd = new ResourceDictionary();
rd.Source = new Uri("ms-appx:///Dictionary1.xaml");

Dann können Sie wie folgt auf eine Ressource zugreifen, die im Ressourcenwörterbuch gespeichert ist:

someObject.Property = rd["mytemplate"];

HINWEIS:
Sie müssen den URI des Ressourcenwörterbuchs entsprechend dem Speicherort ändern, den Sie relativ zum Basisverzeichnis des Projekts erstellt haben.

1
Alex Essilfie

Jeder der oben genannten Ansätze funktioniert, um die Ressource basierend auf dem Standort zu erhalten. Wenn Sie MVVMm folgen, würde ich Folgendes empfehlen: 

  1. erstellen Sie einen Dienst wie ProvideDataTemplateService (um einen Dienst zu erstellen, der normalerweise von Behavior geerbt wird)
  2. Verwenden Sie einen Container Ihrer Wahl, um diesen Dienst dort einzuspeisen, wo Sie Asse für DataTemple erhalten möchten. 
0
dman