2010-10-19 16 views
10
için dön

Kaynak dosyamı değiştirdiğimde (.resx) metin ekle veya değiştir, kaynağımın kurucusu her zaman dahili olarak gider ve bundan sonra, Silverlight'ımı çalıştırdığımda XAML bağlantımda bir hata var .Silverlight resource constructor her zaman iç

Bu senaryodan kaçınmanın bir yolu var mı? Ben

<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

Aynı sorunu yaşıyorum, rahatsız edici ... – Rumplin

+0

WPF'de [this] (http://stackoverflow.com/a/16174350/385995) yaptım, Silverlight için de çalışmalıyım. –

cevap

0

Bunun nedeni sizin olmasıdır

benim xaml dosyasında böyle benim kaynağı kullanmak problemi çözmek için benim kaynağın tasarımcı gidip halka yapıcı koymak gerekir Sınıfı kendin oluşturmamalı. Bunun yerine, her zaman sınıfınızı sizin için başlatan ConsoleApplication1.Resource1.ResourceManager kullanın.

Burada, ConsoleApplication1, derlemenizin adı ve Resource1 kaynak dosyanızın adıdır. Sonra

public class StringsWrapper 
{ 
    private static LibraryItemDetailsView _view = null; 

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

Eğer kaynak erişebilirsiniz XAML:

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


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

Bu şekilde resx yapıcı dahili olabilir

+0

Bana bağlayıcı bir örnek verebilir misiniz? –

+0

Sözünü ettiğiniz ResourceManager, dize değişkenlerini açığa çıkarmaz, bu nedenle, çiftlenemez. Herhangi bir değer almak için bir GetX yöntemini kullanmanız gerekir. – Aligned

3

Bir özelliği üzerinden kaynaklarını ortaya Ortak bir sınıf oluşturabilir !

1

Peki benim yaptığım public :)

Önceden yapı düzenleyebilir ve her internalstring yerini her Silverlight projesinin olayı-build öncesi bir komut satırı yardımcı eklemek oldu tarafından inşa sonrası olaylar: Bir projeye sağ tıklamak ->Properties ->Build Events.

RXFIND adlı bir yardımcı program kullandım, ücretsizdir ve seçili dosyalar içindeki bir dizeyi RegEx düzenli ifadeyi kullanarak değiştirebilir.

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

tüm kaynaklar her proje içinde Kaynak dizin altında bulunan ve komut satırı yardımcı programı benim yarattığım

0

\ThirdParty\rxfind dizinde bulunan olduğunu lütfen unutmayın: Burada

kullanıyorum komut satırı var Düzenlediğim her dosya için bunu benim için bir makro. Hala onu çalıştırmayı hatırlamak zorundayım, ama çok daha hızlı. Lütfen my post'a bakın.

1

Aynı hatam da var.

public class TrackResourceWrapper : TrackResource 
{ 
} 

ile: TrackResourceWrapper sınıf TrackResource olduğu devralıyorsa o da bu halk sınıfı olması gerektiğini bilerek, sadece kaynaklar dosyayı temsil sınıfından devralan bir public class oluşturulan sorunu çözmek için benim exep olduğunu arkasında kod kaynak dosyasında bulunan sınıf (public class) Basitçe

1

:

  1. resourc devraldığı yeni bir sınıf ekleme E sınıfı
  2. App.xaml dosyasında,

Yapıldı oluşturulan kaynak sınıfını değiştirmek!