2010-10-19 9 views
10

Kiedy modyfikuję mój plik zasobów (.resx) dodam tekst lub modyfikuję, konstruktor mojego zasobu zawsze przechodzi do wewnętrznego, a po tym, kiedy uruchamiam mój silverlight, mam błąd w moim powiązaniu XAML .Konstruktor zasobów Silverlight zawsze powraca do wewnętrznego

Czy istnieje sposób na uniknięcie tego scenariusza? Muszę iść w projektancie mojego zasobu i umieścić konstruktora do publicznej wiadomości, aby rozwiązać problem

używam zasobu jak to w moim pliku 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> 
+0

Występuje ten sam problem, to denerwujące ... – Rumplin

+0

Zrobiłem [to] (http://stackoverflow.com/a/16174350/385995) w WPF, powinien również pracować dla Silverlight. –

Odpowiedz

0

Powodem tego jest to, że sam nie powinien tworzyć instancji klasy. Zamiast tego należy zawsze używać ConsoleApplication1.Resource1.ResourceManager, która sama tworzy instancję dla ciebie.

Tutaj, ConsoleApplication1 to nazwa twojego zespołu i Resource1 nazwa twojego pliku zasobów.

+0

Czy możesz podać przykład z wiązaniem? –

+0

Podany menedżer zasobów ResourceManager nie udostępnia zmiennych łańcuchowych, więc nie będzie można powiązać. Trzeba użyć metody GetX, aby uzyskać z niej dowolne wartości. – Aligned

3

Można utworzyć publiczną klasę, która eksponuje zasoby poprzez właściwość:

public class StringsWrapper 
{ 
    private static LibraryItemDetailsView _view = null; 

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

Następnie w XAML można uzyskać dostęp do zasobów:

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


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

ten sposób RESX konstruktor może być wewnętrzny !

1

No, co zrobiłem było dodać narzędzia wiersza polecenia do pre-build zdarzenie każdego projektu Silverlight, który zastępuje każdy internalstring z public :)

Możesz edytować Gotowy i wydarzenia post-build przez: kliknięcie prawym przyciskiem myszy projektu ->Properties ->Build Events.

Użyłem narzędzia o nazwie RXFIND, jest ono bezpłatne i może zastąpić ciąg w wybranych plikach przy użyciu wyrażenia regularnego RegEx.

Oto wiersz poleceń Używam:

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

Należy pamiętać, że wszystkie moje zasoby znajdują się w katalogu zasobów w ramach każdego projektu oraz narzędzie wiersza polecenia znajduje się w \ThirdParty\rxfind katalogu

0

utworzonego makro, aby zrobić to dla mnie dla każdego edytowanego pliku. Nadal muszę pamiętać, aby go uruchomić, ale jest o wiele szybszy. Proszę zobaczyć my post.

1

Też mam ten sam błąd.Aby rozwiązać ten problem, po prostu stworzył public class, która dziedziczy z klasy reprezentującej plik zasobów, wiedząc, że to musi być również public class to moja exep:

public class TrackResourceWrapper : TrackResource 
{ 
} 

z: TrackResourceWrapper dziedziczy klasa TrackResource jest Klasa, która znajduje się w pliku kod zasobów za (public class)

1

prostu:

  1. Dodaj nową klasę, która dziedziczy z resourc Klasa
  2. e W pliku App.xaml, zmodyfikować klasę zasobu, który został utworzony

Gotowe!

Powiązane problemy