Domanda

Ho un DataTemplate definito in un file xaml a cui voglio accedere tramite il codice C #. Qualcuno può dirmi come posso accedervi? Ho aggiunto un nuovo file ResourceDictionary e il suo nome è Dictionary1.xaml .   Ho un modello di dati come:

<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>

non ho un ListBox chiamato listBox1 e voglio assegnarlo alla sua proprietà Itemtemplate ma non capisco come posso farlo?

È stato utile?

Soluzione

Dove lo stai definendo esattamente?

Se lo definisci nel ResourceDictionary del tuo oggetto, quindi

Application.Current.Resources[typeof(yourDataTemplateTargetType)] 

dovrebbe funzionare. Se lo stai definendo come membro di qualcos'altro, ad esempio, ItemsControl, devi ottenere un handle per l'istanza ItemsControl e chiamare la proprietà ItemTemplate.

Modifica: Ok, penso che stiamo arrivando da qualche parte. Quindi stai definendo un ResourceDictionary nel suo file. Prima di poterlo utilizzare nella tua UI e accedervi dal tuo codice, devi unire ResourceDictionary nella tua applicazione. Lo stai facendo?

Se lo sei, il passaggio successivo è ottenere questa risorsa. Ogni FrameworkElement ha un metodo chiamato FindResource . Questo metodo è eccezionale perché percorre l'albero ResourceDictionary e tenta di individuare la risorsa con la chiave. Pertanto, se si desidera accedere a questa risorsa da un UserControl, è possibile effettuare le seguenti operazioni nel codice sottostante:

FindResource(typeof(yourDataTemplateTargetType));

Se questo non funziona per te, ti preghiamo di mostrarci esattamente come stai dichiarando questo dizionario delle risorse e come viene unito alle risorse della tua applicazione.

Altri suggerimenti

Dato che Application.Current era nullo nel mio caso, ho finito per usare questo:

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

e quindi ottenere la chiave specificata di cui avevo bisogno utilizzando myResourceDictionary [" KeyName "] come TypeOfItem

( source )

Se ad esempio hai un modello per Button nel dizionario delle risorse nel file App.xaml, puoi accedervi utilizzando il seguente codice:

Application.Current.Resources[typeof(Button)]

Puoi accedere a un dizionario delle risorse che hai aggiunto al tuo progetto come segue:

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

Quindi puoi accedere a una risorsa memorizzata nel dizionario delle risorse in questo modo:

someObject.Property = rd["mytemplate"];

Nota:
Dovrai modificare l'URI nel dizionario delle risorse in base alla posizione che hai creato in relazione alla directory di base del progetto.

Uno qualsiasi degli approcci sopra funziona per ottenere la risorsa in base alla posizione, se stai seguendo MVVMm ti consiglierei di farlo in questo modo:

  1. crea un servizio come ProvideDataTemplateService, (per creare un servizio usualmente ereditato da Behavior)
  2. Usa il contenitore di tua scelta per iniettare questo servizio dove desideri avere assi su DataTemple.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top