10 votes

Le constructeur de ressources Silverlight renvoie toujours à la ressource interne

Lorsque je modifie mon fichier de ressources ( .resx ) ajouter du texte ou modifier, le constructeur de ma ressource va toujours en interne et après cela, quand je lance mon silverlight, j'ai une erreur dans mon XAML de liaison.

Existe-t-il un moyen d'éviter ce scénario ? Je dois aller dans le designer de ma ressource et mettre le constructeur à public pour résoudre le problème.

J'utilise ma ressource comme suit dans mon fichier xaml

 <UserControl.Resources>
        <resources:LibraryItemDetailsView x:Key="LibraryItemDetailsViewResources"></resources:LibraryItemDetailsView>
    </UserControl.Resources>

<TextBlock FontSize="12" FontWeight="Bold" Text="{Binding Path=FileSelectedText3, Source={StaticResource LibraryItemDetailsViewResources}}"></TextBlock>

4voto

Gavin Points 363

Une autre façon de procéder sans modifier le code est la suivante. Cela a bien fonctionné pour moi.

http://guysmithferrier.com/post/2010/09/PublicResourceCodeGenerator-now-works-with-Visual-Studio-2010.aspx

3voto

Alex B Points 301

Vous pouvez créer une classe publique qui expose les ressources par le biais d'une propriété :

public class StringsWrapper
{
    private static LibraryItemDetailsView _view = null;

    public LibraryItemDetailsView View
    {
        get
        {
            if (_view == null)
            {
                _view = new LibraryItemDetailsView();
            }
            return _view;
        }
    }
}

Ensuite, dans votre XAML, vous pouvez accéder à votre ressource :

<UserControl.Resources>
    <StringsWrapper x:Key="LibraryItemDetailsViewResources"></StringsWrapper>
</UserControl.Resources>

<TextBlock FontSize="12" FontWeight="Bold" Text="{Binding Path=View.FileSelectedText3, Source={StaticResource LibraryItemDetailsViewResources}}"></TextBlock>

De cette manière, le constructeur resx peut être interne !

1voto

michal Points 179

Ce que j'ai fait, c'est que j'ai ajouté un utilitaire en ligne de commande à l'événement de préconstruction de chaque projet Silverlight qui remplace chaque internal string con public :)

Vous pouvez éditer les événements pré-construction et post-construction en : En cliquant avec le bouton droit de la souris sur un projet -> Properties -> Build Events .

J'ai utilisé un utilitaire appelé RXFIND Il est gratuit et permet de remplacer une chaîne de caractères dans des fichiers sélectionnés à l'aide d'une fonction RegEx expression régulière.

Voici la ligne de commande que j'utilise :

"$(SolutionDir)ThirdParty\rxfind\rxfind.exe" "$(ProjectDir)Resources\*.Designer.cs" "/P:internal " "/R:public " /Q /B:2

Veuillez noter que toutes mes ressources se trouvent dans le répertoire Resource de chaque projet et que l'utilitaire de ligne de commande se trouve dans le répertoire \ThirdParty\rxfind répertoire

1voto

ANADI Juba Points 23

J'ai également la même erreur. Pour résoudre le problème, j'ai créé un fichier public class qui hérite de la classe représentant le fichier de ressources, sachant qu'elle doit aussi être une classe publique voici mon exep :

public class TrackResourceWrapper : TrackResource
{
}

avec : TrackResourceWrapper hérite de la classe TrackResource est la classe qui se trouve dans le fichier de ressources de code derrière (classe publique)

1voto

tiagosito Points 31

Tout simplement :

  1. Ajouter une nouvelle classe qui hérite de la classe de ressource
  2. Dans le fichier App.xaml, modifiez la classe de ressources que vous avez créée

C'est fait !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X