2009-07-22 10 views
30

Bất cứ khi nào tôi có thể tạo một ứng dụng WPF mới hoặc WPF thư viện điều khiển người dùng, file AssemblyInfo.cs bao gồm các thuộc tính sau:Thuộc tính ThemeInfo là gì?

[assembly: ThemeInfo(
    ResourceDictionaryLocation.None, 
    //where theme specific resource dictionaries are located 
    //(used if a resource is not found in the page, 
    // or application resource dictionaries) 
    ResourceDictionaryLocation.SourceAssembly 
    //where the generic resource dictionary is located 
    //(used if a resource is not found in the page, 
    // app, or any theme specific resource dictionaries) 
)] 

ThemeInfo thuộc tính này là cái gì? Tôi sẽ phá vỡ bất cứ điều gì nếu tôi loại bỏ nó?

+1

Man, tôi rất vui vì tôi tình cờ gặp phải điều này! Tôi đã nhận được một cửa sổ trống/đen vì một CustomView tùy chỉnh tôi đã xây dựng và sau đó chuyển sang một dự án khác. Thêm này cố định nó! – Heliac

Trả lời

16

Thuộc tính ThemeInfo chỉ định nơi cơ chế theming tự động sẽ tìm kiếm từ điển chủ đề và từ điển chung. Mỗi tùy chọn có thể được đặt thành một trong các giá trị sau:

  • Không (mặc định): Không tìm từ điển tài nguyên.
  • SourceAssembly: Từ điển là cụm hiện tại.
  • ExternalAssembly: Từ điển nằm trong một hội đồng khác, phải được đặt tên <AssemblyName>.<ThemeName>.dll, trong đó <AssemblyName> là tên hiện tại của assembly là .

Nếu từ điển chủ đề xác định phong cách cho các điều khiển được định nghĩa trong hội đồng bên ngoài, ví dụ, WPF kiểm soát như System.Windows.Controls.ProgressBarSystem.Windows.Button, sau đó bạn phải sử dụng ThemeDictionaryExtension để xác định các ứng dụng như là nguồn cho các từ điển chủ đề .

+4

Nhưng điều đó có nghĩa là gì? "Từ điển chủ đề" là gì? "Từ điển chung" là gì? Chúng là gì? Chúng có quan trọng không? Và, như tôi đã hỏi trong câu hỏi của mình, liệu tôi có thể phá vỡ bất cứ điều gì nếu tôi loại bỏ các thuộc tính? –

+0

Như tôi biết nếu bạn sẽ loại bỏ các điều khiển của bạn sẽ không có chủ đề từ generic.xaml, nó nói nơi để tìm kiếm chủ đề chung –

+1

Cảm ơn bạn! Tôi đã cố gắng điên cuồng để có được phong cách dựa trên chủ đề được áp dụng cho các điều khiển được xác định bên ngoài. Tôi không có ý tưởng về 'ThemeDictionaryExtension'. Khi tôi thêm vào đó, mọi thứ cuối cùng đều hiệu quả! Cảm ơn một lần nữa !! –

5

Khuôn khổ WPF sử dụng thuộc tính này trong thư viện kiểm soát như một cách thuận tiện để áp dụng tài nguyên cho điều khiển.

Hãy xem xét rằng Windows có thể chạy với các giao diện người dùng khác nhau (Aero là một ví dụ như vậy). Các điều khiển WPF được cung cấp bởi Microsoft thay đổi diện mạo của chúng cho các chủ đề môi trường khác nhau.

Nếu ứng dụng của bạn yêu cầu hành vi này, bạn có thể tạo các từ điển chủ đề khác nhau trong thư mục themes của dự án thư viện điều khiển của bạn.

Thậm chí nếu bạn không cần hỗ trợ đa chủ đề, bạn có thể đặt các tài nguyên trong tệp generic.xaml một cách thuận tiện để chúng có thể truy cập được để điều khiển trong hội đồng. Có lẽ phần tử (control) của bạn được định nghĩa trong một tệp .cs mà không cần một lớp .xaml một phần và bạn cần một nơi nào đó để lưu trữ các tài nguyên cần hoặc (nhiều khả năng) bạn có tài nguyên sẽ được chia sẻ giữa nhiều phần tử WPF trong cùng một dự án/hội,, tổ hợp.

Thuộc tính bạn đang đề cập đến ở đây là siêu dữ liệu để ánh xạ các tài nguyên này.

+0

Vì vậy, tôi không cần thuộc tính nếu tôi đang sử dụng các nút điều khiển có thể sử dụng tiêu chuẩn như Nút? Tôi sẽ chỉ cần nó nếu: (a) Tôi đã viết điều khiển của riêng tôi từ đầu cần thiết để nhìn khác nhau trong Aero vs Luna vv, hoặc (b) lắp ráp của tôi đã có một tập tin generic.xaml? Và trong cả hai trường hợp đó, các giá trị mặc định sẽ không hoạt động và tôi cần thuộc tính? –

+0

Có bạn đang đi đúng hướng ở đây, nhưng tôi khi chúng tôi đang nói về điều khiển của riêng bạn, không có bất kỳ tài nguyên 'mặc định' nào. Mặc định duy nhất bạn có thể đã đến thông qua tệp 'generic.xaml'. Tài nguyên trong từ điển đó bị ghi đè bởi các mục từ điển tài nguyên theo chủ đề cụ thể, nếu chúng tồn tại. –