2013-03-05 44 views
6

Gần đây tôi đã nâng cấp lên VS 2012, tôi đã bắt đầu sử dụng .net 4.5 nhưng đó là ngoài điểm. Vấn đề của tôi là như sau:Không thể giải quyết tài nguyên "x".

Tôi có một ResourceDictionary trong dự án chính của tôi gọi AppStyles.xaml, và trong App.Xaml Tôi đã điều sau đây:

<ResourceDictionary> 
    <ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="AppStyles.xaml"/> 
    <ResourceDictionary.MergedDictionaries> 
</ResourceDictionary> 

Trong ResourceDictionary tôi có một phong cách, và sau đó tôi có thể áp dụng kiểu này cho bất kỳ nút nào trong bất kỳ dự án nào của tôi bằng cách đặt Style={StaticResource MyButton}.

Sau khi nâng cấp lên VS 2012, tôi nhận thấy rằng tôi nhận được lỗi trong tiêu đề rất nhiều, và đôi khi nó ngăn tôi gỡ lỗi và đôi khi không!

Có cách nào khác mà tôi nên thực hiện việc này hoặc có sự cố trong VS 2012 không?

+0

Bạn có nghĩa là bạn sẽ có được những vấn đề trong thời gian thiết kế về một cái gì đó không được tìm thấy? Nhưng bạn có thể biên dịch và nó chạy tốt, phải không? –

+0

Tôi gặp lỗi trong thời gian thiết kế nói rằng không tìm thấy tài nguyên. Nhưng đôi khi tôi có thể chạy và thậm chí hiển thị các nút chính xác! Nhưng sau đó vào những lúc khác, nó dừng việc gỡ lỗi. –

+0

Bạn có mã phía sau cho AppStyles.xaml không? (Tôi đã làm và điều đó ngăn chặn VS tải nó trong thời gian thiết kế) Một vấn đề khác có thể bao gồm AppStyles.xaml như một tài nguyên mà làm việc tại thời gian biên dịch, nhưng không phải trong thời gian thiết kế. Nó phải là 'Trang'. – Wouter

Trả lời

5

Tôi cũng gặp vấn đề này với thời gian trong VS2010. Đôi khi vấn đề sẽ giải quyết nếu tôi thực hiện một "Giải pháp sạch" và "Giải pháp xây dựng lại". Nếu điều đó không làm việc tôi thường khởi động lại VS2010.

Tôi cũng đã đổi tên Kiểu x: Khóa thành thứ khác và sự cố đã biến mất. Nhưng tôi không tìm thấy giải pháp này trở nên hoàn hảo ...

<Application.Resources> 
<ResourceDictionary> 
    <ResourceDictionary.MergedDictionaries> 

    <!-- Load Infrastructure's Resource Dictionaries --> 
    <ResourceDictionary Source="/MyProject.Modules.Infrastructure;component/ResourceDictionaries/ResourceLibrary.xaml" /> 

    </ResourceDictionary.MergedDictionaries> 

    <!-- Workaround for ResourceDictionary loading bug/optimization --> 
    <Style TargetType="{x:Type Rectangle}" /> 

</ResourceDictionary> 

Liên quan đến câu hỏi này liên quan đến việc Cách giải quyết trong mẫu mã của tôi: Trouble referencing a Resource Dictionary that contains a Merged Dictionary

+0

Tôi đã làm sạch, xây dựng lại, khởi động lại và thậm chí khởi động lại máy tính của mình! Lỗi này tiếp tục xuất hiện và nó không có ý nghĩa gì, nó chạy hoàn toàn một giây và tiếp theo nó không thể biên dịch được nữa! –

+0

Hmm. Điều này thật kỳ lạ. Bạn đã thử đổi tên các phím Kiểu của mình chưa? – hijack

+0

Vâng tôi có, vấn đề vẫn còn! Nó không ngăn tôi biên dịch nữa, nhưng không có điều khiển tùy chỉnh nào của tôi sử dụng kiểu này có thể được thể hiện trong thiết kế! –

4

bạn có thể tạo một dự án chung hoặc cơ sở hạ tầng từ đó các dự án khác sẽ tham khảo. Thêm tài nguyên resouce của bạn. Sau đó tạo một URI gói. sau đó tham khảo trong usercontrol hoặc cửa sổ nguồn lực của bạn trong vòng một từ điển tài nguyên

<...Resources> 
<ResourceDictionary> 
    <!-- Resource Dictionaries --> 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary 
      Source="pack://application:,,,/Common;component/Dictionaries/Styles.xaml"/> 
    </ResourceDictionary.MergedDictionaries> 

Trong usercontrol hoặc sử dụng Window.Resources trong trường hợp của một cửa sổ. Điều này làm việc cho tôi.

10

WPF không thể giải quyết từ điển tài nguyên mà bạn đang cố hợp nhất. Khi bạn tạo một từ điển hợp nhất, WPF tuân theo một bộ quy tắc để cố gắng giải quyết URI. Trong trường hợp của bạn, URI là mơ hồ, do đó, WPF không thể giải quyết nó một cách đáng tin cậy.

Thay đổi Source URI trong App.xaml thành URI gói tuyệt đối. Ví dụ, nếu bạn dự án được gọi là MyProject (nghĩa là .: "MyProject" là tên lắp ráp ngắn), sau đó bạn nên thay đổi Source trong App.xaml tới:

này giả AppStyles.xaml là trong thư mục gốc của MyProject. Bạn có thể tùy ý chỉ định quyền, phiên bản lắp ráp và thông tin khóa công khai của hội đồng đã ký. Tuy nhiên, bạn nên an toàn với tên lắp ráp ngắn (MyProject, trong ví dụ trên).

Xem trang này trên MSDN để biết thêm chi tiết về Gói URI trong WPF: http://msdn.microsoft.com/en-us/library/aa970069(v=vs.110).aspx

1

bạn có thể thêm vào từ điển tài nguyên để dự án của bạn sau đó thay đổi hành động xây dựng của mình cho tài nguyên và sau đó cố gắng thêm uri của nó trong các mã như sau:

<ResourceDictionary> 
<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary 
     Source="/Styles.xaml"/> 
</ResourceDictionary.MergedDictionaries> 

hoặc đơn giản là để cho quá trình vs2012 nó bằng cách sử dụng các tab thuộc tính ...

+0

chuyển từ điển xây dựng hành động sang * Tài nguyên * không thay đổi bất cứ điều gì – superjos

3

nó có thể sử dụng đường dẫn tương đối so với thư mục appStyles.xaml của bạn. hi vọng điêu nay co ich.

một cái gì đó như dưới đây

<ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="../Resources/Styles.xaml"></ResourceDictionary> 
     </ResourceDictionary.MergedDictionaries> 
<ResourceDictionary> 
Các vấn đề liên quan