2012-04-03 5 views
1

Szenario:Silverlight Zugang Ressource von Key von einem Custom Backend-Code

Ich habe eine Ansicht, die einige Datatemplate Ressourcen

<DataTemplate x:Key="myDragCueTemplate"> 
     <Border Background="Blue" 
       Opacity="0.5" 
       Width="250"> 
      <TextBlock Text="{Binding}" HorizontalAlignment="Left"></TextBlock> 
     </Border> 
    </DataTemplate> 

ich eine benutzerdefinierte Kontrolle von ListBox abgeleitet hat. In der benutzerdefinierten Listbox eines bestimmten Ereignisses möchte ich ein Datamitplate aus den Ressourcen der View abrufen.

public class MyListBox : ListBox 
{ 
    public MyListBox() 
    { 
     this.DefaultStyleKey = typeof(MyListBox); 
    } 
... 

itemDragCue.ContentTemplate = this.Resources["myDragCueTemplate"] as DataTemplate; 

... 

Ich versuchte, die Datatemplates in eine separate XAML-Datei hinzufügen und einen Resource hinzugefügt, aber es hat es noch nicht abholen.

Wie kann ich die Ressource im Backend des benutzerdefinierten Steuerelements abrufen?

Danke.

Antwort

2

this.Resources geben nur die deklarierten Ressourcen in

<UserControl x:Class="MyListbox"> 
    <UserControl.Resources> 

würde ich setzen myDragCueTemplate in einem Resource empfehlen. Sie müssen dann das ResourceDictionary in Ihrem Code hinterher lesen und die gewünschte Ressource extrahieren.

testen

const string resourcesPath = "/AssemblyName;component/Resources.xaml"; 
Uri resourceUri = new Uri(resourcesPath, UriKind.Relative); 
StreamResourceInfo sri = Application.GetResourceStream(resourceUri); 
StreamReader sr = new StreamReader(sri.Stream); 
ResourceDictionary dictionary = (ResourceDictionary) XamlReader.Load(sr.ReadToEnd()); 
itemDragCue.ContentTemplate = dictionary["myDragCueTemplate"] as DataTemplate; 
+0

funktioniert wie ein Charme cadrell0. Danke vielmals! – asuciu