2010-04-20 53 views
12

Tôi có một WPF ResourceDictionary với TextBlock sau:Phạm vi của StaticResource trong tài nguyên WPF là gì?

<TextBlock Visibility="{Binding Converter={StaticResource MyBoolProp ResourceKey=BoolToVis}}"> 
</TextBlock> 

Các ResourceDictionary được bao gồm trong App.xaml dưới MergedDictionaries:

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="MyResourceDictionary.xaml"/> 

Trong App.xaml tôi đã xác định chuyển đổi BoolToVis (một lần nữa , dưới Application.Resources)

<BooleanToVisibilityConverter x:Key="BoolToVis" /> 

Khi tôi khởi động ứng dụng của mình - Tôi nhận được XamlParseExcep sau tion:

"Cung cấp giá trị trên 'System.Windows.Markup.StaticResourceHolder' ném một ngoại lệ."

Các InnerException là:

"Không thể tìm thấy tài nguyên có tên là 'BoolToVis' tên Resource là trường hợp nhạy cảm.."

Tôi có thể tham khảo bộ chuyển đổi này trực tiếp với App.xaml (trên thực tế, khai báo XAML cụ thể là giống nhau) và trong các UserControls khác không có vấn đề gì.

Đoạn mã cụ thể này cũng hoạt động tốt theo .NET 4.0 RC (và Beta2). Lỗi này chỉ bắt đầu xảy ra khi tôi nâng cấp lên .NET 4.0 RTM.

Tôi có thể làm việc xung quanh nó bằng cách tuyên bố khác BooleanToVisibilityConverter trong MyResourceDictionary.xaml và đề cập đến nó như vậy:

<TextBlock Visibility="{Binding Converter={StaticResource MyBoolProp ResourceKey=BoolToVis2}}"> 
</TextBlock> 

lý do Bất kỳ lý do tại sao nên tôi cần phải làm điều này?

Trả lời

8

mỗi MSDN:

Tài trong một cuốn từ điển sáp nhập chiếm một vị trí trong phạm vi tra cứu tài nguyên đó là ngay sau khi phạm vi của từ điển tài nguyên chính họ đang sáp nhập vào.

Tài nguyên được xác định trong App.xaml không thể xem bằng ResourceDictionary được hợp nhất. Tôi sẽ nghĩ rằng nó có ý nghĩa hơn để xác định một bộ chuyển đổi được sử dụng trong một ResourceDictionary trong ResourceDictionary chính nó, hoặc một ResourceDictionary mà nhà tất cả các chuyển đổi của bạn.

+1

Có thể chúng tôi sẽ thực hiện tuyến đường thứ hai. Điều gì là như vậy bizzare là mã này chạy tốt trong RC, nhưng không phải là RTM. Đội ngũ dev của chúng tôi là "hỗn hợp" liên quan đến những người có phiên bản nào. Là một người nhận nuôi sớm, tôi đã vẽ rơm ngắn :). Cảm ơn! –

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