Tôi có một trang trong ứng dụng Windows Phone 8.1 nơi tôi có một vài thành phần có thể có ba trạng thái màu khác nhau. Chúng phải có màu đỏ, xanh dương hoặc màu nền trước của chủ đề hiện tại. Do đó, nếu ứng dụng của tôi bắt đầu sử dụng chủ đề Tối trên điện thoại, sau đó người dùng bước ra khỏi ứng dụng và thay đổi chủ đề Ánh sáng, sau đó lại vào lại ứng dụng, tôi cần thay đổi ngay các thành phần đã có màu nền trước của chủ đề cũ.Khi nào lập trình kiểm tra các thay đổi chủ đề trong Windows Phone 8.1
Vì các thành phần được cho là thay đổi giữa các màu khác nhau (trong đó màu nền trước của chủ đề chỉ là một trong số chúng), tôi không thể đặt Foreground thành PhoneForegroundColor
trong XAML
.
Những gì tôi đã làm là thêm một người biết lắng nghe Resuming
trường hợp thực hiện điều này:
myTextBlock.Foreground = new SolidColorBrush((Color)Application.Current.Resources["PhoneForegroundColor"]);
... Nhưng sự kiện Resuming
là bắn trước khi các nguồn lực của Application.Current được cập nhật, vì vậy tôi kết thúc với cùng màu như trước. Nếu người dùng bước ra một lần nữa và trong một lần nữa, nó sẽ làm việc kể từ Application.Current.Resources["PhoneForegroundColor"]
đã được cập nhật tại một số điểm sau khi sự kiện Resuming
thời gian trước đó.
Câu hỏi: Khi nào lần đầu tiên tôi có thể đọc cập nhật Application.Current.Resources["PhoneForegroundColor"]
, vì Resuming
dường như không đúng nơi?
Câu hỏi: Ngoài ra, có một cách để myTextBlock
kế thừa ForegroundColor (CSS-ish) của thành phần khác, vì vậy mà tôi có thể thay đổi myTextBlock.Foreground
programatically giữa Red/Blue/Kế thừa mà không cần phải bận tâm thay đổi đối với Theme điện thoại trong vòng đời của ứng dụng của tôi?
Bất kỳ đề xuất nào được đánh giá cao!
Cảm ơn rất nhiều! Tôi cũng đã nhận được một trong những đầu tiên để làm việc vì vậy tôi sẽ với giải pháp đó :) Đối với các giải pháp thay thế mặc dù, tôi sẽ cần phải lập trình thiết lập Foreground để "{Binding TextColor, Source = {StaticResource ColorBindingProvider}}" phải không? Vì tôi có thể đã ghi đè nó bằng màu đỏ hoặc màu xanh, vì vậy bất cứ điều gì trong XAML không hoạt động nữa ... – andrrs
Không, bạn chỉ có thể đặt thiết lập Màu của bạn trong phương thức "App_Resuming" của nhà cung cấp. Nó là thuộc tính phụ thuộc, vì vậy nó sẽ thông báo cho tất cả các ràng buộc khi cập nhật. Tất nhiên bạn phải kích hoạt nó bằng cách nào đó, nếu bạn thay đổi cài đặt màu trên thời gian chạy. Sử dụng tin nhắn hoặc chỉ nhận nhà cung cấp qua App.Current.Resources [...] và đặt thuộc tính. –
Btw: Thay vì sử dụng thuộc tính phụ thuộc, bạn cũng có thể chỉ có BindingProvider triển khai INotifyPropertyChanged ... –