2010-10-19 29 views
10

Khi tôi sửa đổi tệp tài nguyên của mình (.resx) thêm văn bản hoặc sửa đổi, hàm tạo của tài nguyên của tôi luôn đi vào nội bộ và sau đó, khi chạy Silverlight của mình, tôi gặp lỗi trong XAML ràng buộc của mình .Trình tạo tài nguyên Silverlight luôn quay về nội bộ

Có cách nào để tránh trường hợp này không? Tôi cần phải đi trong nhà thiết kế tài nguyên của tôi và đưa các nhà xây dựng cho công chúng để giải quyết vấn đề

tôi sử dụng tài nguyên của tôi như thế này trong tập tin XAML của tôi

<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

Tôi đang gặp phải sự cố tương tự, gây phiền toái ... – Rumplin

+0

Tôi đã thực hiện [this] (http://stackoverflow.com/a/16174350/385995) trong WPF, cũng nên hoạt động với Silverlight. –

Trả lời

0

Lý do cho điều này là bạn không nên tự mình lên lớp. Thay vào đó, bạn nên luôn sử dụng ConsoleApplication1.Resource1.ResourceManager để tự khởi tạo lớp cho bạn.

Ở đây, ConsoleApplication1 là tên của hội đồng của bạn và Resource1 tên tệp tài nguyên của bạn.

+0

Bạn có thể cho tôi ví dụ về ràng buộc không? –

+0

Trình quản lý tài nguyên mà bạn đề cập không hiển thị các biến chuỗi để nó không bị ràng buộc. Bạn sẽ phải sử dụng phương thức GetX để nhận bất kỳ giá trị nào từ nó. – Aligned

3

Bạn có thể tạo ra một lớp nào đó cho thấy nhiều nguồn lực thông qua một tài sản:

public class StringsWrapper 
{ 
    private static LibraryItemDetailsView _view = null; 

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

Sau đó, trong XAML của bạn, bạn có thể truy cập vào tài nguyên của bạn:

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


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

Bằng cách này các nhà xây dựng resx có thể nội bộ !

1

Vâng, những gì tôi đã làm là để thêm một tiện ích dòng lệnh để sự kiện của từng dự án Silverlight thay thế mỗi internalstring với public :)

Bạn có thể chỉnh sửa trước khi xây dựng và xây dựng trước các sự kiện sau xây dựng bằng cách: Nhấp chuột phải vào một dự án ->Properties ->Build Events.

Tôi đã sử dụng tiện ích gọi là RXFIND, miễn phí và có thể thay thế chuỗi trong các tệp được chọn bằng cách sử dụng biểu thức chính quy RegEx.

Đây là dòng lệnh Tôi đang sử dụng:

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

Xin lưu ý, rằng tất cả các nguồn lực của tôi đều nằm trong thư mục Resource trong mỗi dự án và tiện ích dòng lệnh nằm trong \ThirdParty\rxfind thư mục

0

tôi đã tạo một macro để làm điều này cho tôi cho mỗi tập tin tôi chỉnh sửa. Tôi vẫn phải nhớ để chạy nó, nhưng nó nhanh hơn rất nhiều. Vui lòng xem my post.

1

Tôi cũng có lỗi tương tự.Để giải quyết vấn đề tôi vừa tạo ra một public class được thừa kế từ lớp đại diện cho các tập tin tài nguyên, biết rằng nó cũng phải public class này là exep tôi:

public class TrackResourceWrapper : TrackResource 
{ 
} 

với: TrackResourceWrapper được kế thừa lớp TrackResource là lớp mà nằm trong các tập tin tài nguyên mã sau (public class)

1

Đơn giản chỉ cần:

  1. Thêm một lớp mới được thừa kế từ resourc e class
  2. Trong tệp App.xaml, sửa đổi lớp tài nguyên mà bạn đã tạo

Xong!

Các vấn đề liên quan