Tôi có Thư viện điều khiển WPF đang được thêm vào ứng dụng biểu mẫu cửa sổ. Chúng tôi muốn cho phép các điều khiển có thể được bản địa hóa, tuy nhiên tôi không chắc chắn cách HOÀN TOÀN thực hiện điều này mà không cần sao chép mã. This is what I am doing now. Về cơ bản, trong ứng dụng biểu mẫu windows, trước khi ứng dụng chính khởi động, tôi đang tạo một App.xaml trong ứng dụng biểu mẫu (chứa liên kết đến tài nguyên của tôi cũng nằm trong ứng dụng biểu mẫu). Điều này hoạt động hoàn hảo cho thời gian chạy.Có cách nào để sử dụng StaticResource trong thư viện điều khiển WPF và có thể xem tại thời điểm thiết kế không?
Tuy nhiên, điều khiển người dùng của tôi tất cả đều có Content="{StaticResource SomeVariableName}"
, kết thúc để trống. Tôi có thể sửa lỗi này bằng cách sử dụng app.xaml và từ điển tài nguyên thích hợp trong thư viện điều khiển của tôi khớp với các từ điển trong ứng dụng biểu mẫu windows của tôi. Tuy nhiên, đây là mã trùng lặp.
Những điều tôi đã cố gắng vô ích:
- Khởi tạo các App.xaml sống trong thư viện điều khiển người dùng từ bên trong ứng dụng các hình thức của tôi. Điều này không có tác dụng vì các URI đến tài nguyên của tôi đang tìm kiếm tài nguyên nhúng, không phải từ điển tài nguyên cục bộ của tôi (sau đó tôi có thể sao chép các tệp tài nguyên từ điều khiển đến vị trí thích hợp trong ứng dụng biểu mẫu của tôi trên bản dựng). Tôi có thể tận dụng DeferrableContent ở đây không? Không có nhiều trực tuyến như xa như tôi có thể tìm thấy trên thuộc tính này và làm thế nào nó nên được sử dụng, mặc dù.
- Tôi muốn sử dụng các bản dựng bài đăng cho cả Ứng dụng và từ điển, tuy nhiên, ứng dụng instantiation là một tham chiếu tĩnh đến một App.xaml được biên dịch theo như tôi có thể nói. Vì vậy, App.xaml phải sống trong biểu mẫu ít nhất
- Tôi đã cố gắng để có một App.xaml trùng lặp với một bài đăng xây dựng di chuyển Dictionary.xaml được cấp lại. Tôi thấy rằng một app.xaml trùng lặp là ok vì đó là động lực và bạn có thể không muốn dựa vào một từ kiểm soát anyway (mà vòng tròn trở lại và làm cho bạn tự hỏi nếu bạn nên sau đó có App.xaml trong sự kiểm soát tại Trừ khi bạn muốn cho phép mặc định sử dụng tài nguyên được nhúng ....) Điều đó quá thất bại khi nói rằng nó không thể tìm thấy tài nguyên mặc dù nó được đặt ở nơi mà URI nên trỏ đến. Các điểm mã decompiled để
Uri resourceLocater = new Uri("/WindowsFormsApplication3;component/app.xaml", UriKind.Relative);
- Tôi đã cố gắng để có một App.xaml trùng lặp với một bài đăng xây dựng di chuyển Dictionary.xaml được cấp lại. Tôi thấy rằng một app.xaml trùng lặp là ok vì đó là động lực và bạn có thể không muốn dựa vào một từ kiểm soát anyway (mà vòng tròn trở lại và làm cho bạn tự hỏi nếu bạn nên sau đó có App.xaml trong sự kiểm soát tại Trừ khi bạn muốn cho phép mặc định sử dụng tài nguyên được nhúng ....) Điều đó quá thất bại khi nói rằng nó không thể tìm thấy tài nguyên mặc dù nó được đặt ở nơi mà URI nên trỏ đến. Các điểm mã decompiled để
Vì vậy, Có cách nào để cho phép này để làm việc và có thời gian xem thiết kế của giá trị mặc định thành phần và tránh trùng lặp? Hoặc, là trùng lặp OK trong trường hợp này? Nếu mục con của viên đạn thứ 2 của tôi có vẻ ok (trùng lặp App.xaml với xây dựng các bản sao chép lại), làm cách nào để nó không tìm kiếm một mục mức thành phần, mà thay vào đó là một cấp độ tệp?
Câu hỏi cuối cùng (và tôi có thể đăng bài này một cách riêng biệt nếu cần) mà tôi vừa chú ý đến. App.xaml của tôi đang được tích hợp vào mã, vì vậy điều đó không cho phép tôi tạo Tài nguyên mới ngay lập tức. Có cách nào để làm điều này không?
Tùy chọn cuối cùng ... có thể là lựa chọn tốt nhất? - I plan on using Andre van Heerwaarde's code anyway, vì vậy tôi chỉ nên kiểm tra sự tồn tại của một tệp và thêm nó làm tài nguyên được hợp nhất khi đang di chuyển? Về cơ bản, có một App.xaml trong điều khiển người dùng của tôi liên kết đến một ResourceDictionary được nhúng mặc định. Và, sau đó có mã tìm kiếm các tài nguyên địa phương thích hợp khi đang di chuyển, có thể là các đường dẫn tệp tương đối? Nhược điểm duy nhất tôi thấy ở đây là mặc định không thể thay đổi trên bay ... mà tôi thậm chí có thể có cái nhìn đó ở một nơi cụ thể (sử dụng một số loại quy ước) và có được ưa thích hơn một trong xây dựng trong?
Ồ, và lý do tôi không muốn tài nguyên nhúng là để người dùng cuối có thể thêm/sửa đổi tài nguyên được bản địa hóa mới sau khi xây dựng được triển khai.
Tôi có thể thêm mã nếu nó sẽ giúp bạn hình dung điều này tốt hơn, chỉ cần cho tôi biết.
CẬP NHẬT
Tôi bây giờ chạy vào một vấn đề nữa với phong cách và không chỉ khoanh vùng.
Dưới đây là một ví dụ về một trong các nút bên trên một trong các điều khiển:
<Button Style="{StaticResource GrayButton}"
Một số điều tôi càng cố gắng/suy nghĩ:
- Tôi không thể tạo ra một App.xaml (mà sẽ không bao giờ được sử dụng) với ResourceDictionary được thiết lập như ApplicationDefinitions không được phép trong các dự án thư viện. Tôi có thể nhúng điều này vào tài nguyên của kiểm soát, nhưng sau đó sẽ luôn được ưu tiên hơn bất kỳ tài nguyên cấp ứng dụng nào và tôi mất khả năng tùy chỉnh.
Here is a connect case mà thực sự có vẻ như những gì tôi đang tìm kiếm, tuy nhiên nó không cung cấp bất kỳ giải pháp thực tế để
Các giải pháp này (ngoài top..which không hoạt động) mà tôi có thể nghĩ rằng có thể làm việc (và chưa thử) cũng có vẻ như rất nhiều công việc cho một cái gì đó mà tôi nghĩ sẽ đơn giản. Nhưng, tôi có thể tạo ra một số thuộc tính phụ thuộc trong điều khiển mà tôi có thể liên kết và sau đó cho phép những người đó được overriden bởi dự án sẽ sử dụng điều khiển. Như tôi đã nói, có vẻ như rất nhiều công việc cho một yêu cầu khá đơn giản :). Điều này thậm chí sẽ làm việc? Và quan trọng hơn, là có một giải pháp tốt hơn, đơn giản hơn mà tôi đang thiếu?
+1 Đây là câu trả lời hay nhất mà tôi đã thấy cho đến thời điểm này. Bằng cách này, tôi có thể đặt mã nguồn tài nguyên của mình ở bất kỳ đâu và có nó hoạt động tuy nhiên tôi cần nó để hành động. Nhưng, làm thế nào điều này sẽ làm việc trong nhà thiết kế? Nó sẽ làm mới một trường hợp của MyResources và sử dụng các giá trị mặc định? –
Theo như tôi nhớ, có. –
+1 rực rỡ!Không bao giờ thậm chí vượt qua tâm trí của tôi để tiếp cận nó như thế này! – Dom