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?

È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top