Tôi nghĩ lý do chính là các đối tượng bịt kín. Nếu bạn có phân cấp Kiểu:
Style A
/ \
Style A1 Style A2
đây có thể không phải là một tình huống khó. Bạn tham khảo StyleA
sử dụng tài nguyên động, vì vậy bất cứ khi nào tài nguyên đó thay đổi, Style A1
và Style A2
sẽ thay đổi thuộc tính BasedOn
của chúng. Tuy nhiên, khi một Style đang được sử dụng trong ứng dụng của bạn, nó sẽ trở thành một đối tượng kín. Style A
trở thành không thay đổi.
Một workaround bạn có thể sử dụng là:
Style A
cần phải thay đổi.
- Tạo đối tượng Kiểu mới sẽ là tài nguyên mới
Style A
.
- Tạo phiên bản mới
Style A1
và Style A2
. Bạn cần phải viết một thủ tục sao chép tạo bản sao của tất cả các Setters
, Resources
, v.v ... Đặt BasedOn
thành phiên bản mới Style A
.
- Cập nhật bộ sưu tập tài nguyên để ba kiểu mới có trong đó.
{DynamicResource StyleA1}
và {DynamicResource StyleA2}
bây giờ sẽ nhận thực tế là các tài nguyên đó thay đổi (từ bước 4) và tự động cập nhật bất kỳ tham chiếu nào.
Lưu ý rằng đây là một tình huống rất đơn giản. Hệ thống phân cấp theo phong cách thế giới thực có thể phức tạp hơn, đặc biệt nếu chúng được trải rộng trên nhiều tệp và đến từ các từ điển đã hợp nhất.
Hy vọng tôi đã hiểu sự cố của bạn và giúp đỡ.
Nguồn
2009-02-25 14:37:05
Làm thế nào về trường hợp này - Một nhóm (Ux) khác tạo ra kiểu cơ sở ... nhà phát triển muốn đặt một vài thuộc tính ngoài kiểu cơ sở.Lý tưởng nhất đây là một kịch bản mà DevStyle BasedOn "DynamicResource UxStyle" sẽ giúp .. Nếu điều này là không thể, các lựa chọn thay thế để hợp nhất 2 phong cách trước khi áp dụng nó vào một điều khiển là gì? – Gishu