Question

J'ai Silverlight Assemblée commande, appelé "MySilverlightControls". Plusieurs dossiers vers le bas dans cette assemblée, j'ai une classe qui étend une colonne de la grille d'un fournisseur tiers, nous allons l'appeler « MyImageColumn.cs ».

J'ai aussi créé un dictionnaire de ressources appelé Generic.xaml, il est situé dans le dossier Themes de l'assemblage. Dans ce dictionnaire de ressources que j'ai défini un ControlTemplate appelé 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>

Ma question est: de MyImageColumn, comment puis-je faire référence à programme / charger ce modèle de contrôle pour que je puisse l'affecter à une propriété sur la colonne? Je me attends à l'aide d'une syntaxe similaire à ceci:

ControlTemplate ct = (ControlTemplate)Application.Current.Resources["MyImageColumnTemplate"];

mais cela renvoie toujours null. Quand je charge l'assemblage dans réflecteur, je vois que le fichier Generic.xaml est là, le nom de la ressource est MySilverlightControls.g.resources, et le chemin à l'intérieur qui est themes/generic.xaml.

Comment puis-je obtenir exactement les éléments individuels dans ce dictionnaire de ressources?

Était-ce utile?

La solution

Got it résolu.

Je avais besoin de:

  • charger mon dictionnaire de ressources
  • fusionner avec les ressources de l'application
  • charger mon modèle de contrôle de la ressource d'application

Dans le cadre de chargement du dictionnaire de ressources, je devais également enregistrer le schéma d'URI de pack. Je devais donc faire face à des fous exceptions à base de COM en raison de légères erreurs avec mon XAML. Je devais aussi bouger mon XAML dans un fichier dictionnaire de ressources distinct, en essayant de le faire à travers generic.xaml lancer des erreurs maintenu (même si le XAML était irréprochable et pourrait être chargé à l'aide du nouveau bien créé le fichier de dictionnaire de ressources). Donc, ce qui simplifie le bas, ce fut le code:

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"];

J'ai posté tous les détails de cette solution dans ce blog après.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top