articoli di accesso a livello di programmazione ResourceDictionary
-
19-09-2019 - |
Domanda
Ho un Silverlight controlla assemblea, chiamata "MySilverlightControls". Diverse cartelle giù in quell'assemblea ho una classe che estende una colonna della griglia da un terzo fornitore, chiamiamolo "MyImageColumn.cs".
Ho anche creato un dizionario risorse chiamato Generic.xaml
, questo si trova nella cartella Themes
dell'assemblea. In questo dizionario risorse ho definito un ControlTemplate chiamato MyImageColumnTemplate :
<ControlTemplate x:Name="MyImageColumnTemplate" >
<Grid Margin="8,8,4,4" MaxHeight="32" MaxWidth="32">
<Grid.Resources>
<localGrid:StatusColumnImageConverter x:Key="ImageContentConverter"/>
</Grid.Resources>
<Border Margin="5,5,0,0" Background="Black" Opacity="0.15" CornerRadius="5" />
<Border Background="#FF6E6E6E" CornerRadius="4,4,4,4" Padding="4" Margin="0,0,5,5">
<Border Background="White" CornerRadius="2,2,2,2" Padding="3">
<Image Source="{Binding EditValue, Converter={StaticResource ImageContentConverter}}" Stretch="Uniform"/>
</Border>
</Border>
</Grid>
</ControlTemplate>
La mia domanda è: da MyImageColumn, come posso fare riferimento a livello di codice / caricare questo modello di controllo in modo da poter assegnare ad una proprietà della colonna? Mi aspetterei di utilizzare una sintassi simile a questo:
ControlTemplate ct = (ControlTemplate)Application.Current.Resources["MyImageColumnTemplate"];
ma questo restituisce sempre null. Quando ho caricare l'assembly in Reflector, vedo che il file Generic.xaml
è lì, il nome della risorsa è MySilverlightControls.g.resources
, e il percorso all'interno di quella è themes/generic.xaml
.
Come posso ottenere esattamente alle singole voci di questo dizionario risorse?
Soluzione
Got it risolto.
avevo bisogno di:
- caricare il mio dizionario risorse
- fonderlo con le risorse dell'applicazione
- caricare il mio modello di controllo dalla risorsa applicazione
Come parte del caricamento del dizionario risorse, ho anche dovuto registrare lo schema URI pack
. Poi ho avuto a che fare con alcune eccezioni folli COM base a causa di lievi errori con la mia XAML. Ho anche dovuto spostare la mia XAML in un file di dizionario risorse a parte, cercando di farlo attraverso generic.xaml mantenuto gettando errori (anche se il codice XAML è stata impeccabile e può essere caricato bene utilizzando il file dizionario risorse appena creato). Quindi, semplificando il basso, questo è stato il codice:
if (!UriParser.IsKnownScheme("pack"))
UriParser.Register(new GenericUriParser(GenericUriParserOptions.GenericAuthority), "pack", -1);
ResourceDictionary dict = new ResourceDictionary();
Uri uri = new Uri("/MySilverlightControls;component/themes/Dictionary1.xaml", UriKind.Relative);
dict.Source = uri;
Application.Current.Resources.MergedDictionaries.Add(dict);
ControlTemplate ct = (ControlTemplate)Application.Current.Resources["MyImageColumnTemplate"];
Ho pubblicato tutti i dettagli per questa soluzione in questo blog dopo .