Tôi đang cố gắng tạo chủ đề tùy chỉnh cho ứng dụng WP8. Không phải chủ đề tối/sáng tích hợp mà là chủ đề nhãn trắng tùy chỉnh. Để làm cho nó hoạt động, tôi đã tạo một lớp tĩnh như:
lớp công khai Chủ đề: DependencyObject
{
chủ đề tĩnh()
{
CurrentTheme = new DefaultAppTheme();
}
IAppTheme tĩnh công khai CurrentTheme { get;
}
Sau đó, tôi có thể liên kết với thuộc tính tĩnh trong trang bằng cách trước tiên đưa tham chiếu vào phần tài nguyên:
cuối cùng:
Cho đến nay rất tốt. Điều duy nhất còn lại là thực hiện điều tương tự trong tệp /Themes/Generic.xaml, nhưng suốt đời tôi không thể tìm ra cách thực hiện.
Tôi có thể xác minh rằng ràng buộc trên hoạt động bằng cách chạy ứng dụng. Tôi có thể thay đổi chủ đề của ứng dụng bằng cách đặt Theme. CurrentTheme trong Ứng dụng ctor.
Làm cách nào để liên kết với thuộc tính màu của lớp chủ đề trong Generic.xaml? Đây là những gì tôi đã thử:
Thêm phần tài nguyên vào ResourceDictionary trong Generic.xaml - không hoạt động vì lớp không hỗ trợ nó
Hãy thử khai báo nó dưới dạng một biến (tài nguyên) trong Generic.xaml và tham chiếu nó, ví dụ:
Không chắc cú pháp ràng buộc ở đây là gì.
- Sử dụng một số phép thuật ràng buộc thuộc tính bổ sung kỳ lạ để giải quyết vấn đề này.
Chung.xaml KHÔNGTrong dự án Ứng dụng, nó nằm trong dự án UserControl (thư viện). Nếu không tôi có thể thêm nó vào phần tài nguyên của lớp Ứng dụng.
Tuyên bố miễn trừ trách nhiệm: Tôi không phải là nhà phát triển WP, tôi phát triển cho trình duyệt máy tính để bàn thông thường Silverlight.
Kiểu mặc định,bản mẫu,chung.xaml Và主题 Một mô hình tinh thần về làm việc hợp tác như sau (điều này cũng có thể hữu ích cho bạn):
Để điều khiển tùy chỉnh (theo mẫu) của tôi hoạt động chính xác trong toàn bộ ứng dụng, khung phải có khả năng tìm thấy mẫu mặc định. Do đó, kiểu mặc định cho các mẫu này được bao gồm trong generic.xaml.mô hình tinh thần:generic.xaml không liên quan gì đến chủ đề, mối quan tâm duy nhất của nó là cung cấp các mẫu (và mặc định) cho các loại tùy chỉnh của tôi để giao diện người dùng ứng dụng của tôi có thể sử dụng được về mặt kỹ thuật.
Trách nhiệm của tôi là mẫu mặc định của tôi thực sự liên kết và sử dụng các thuộc tính phụ thuộc công khai liên quan đến giao diện của điều khiển: Nền, BorderBrush, BorderThickness, Foreground, Padding
Có lẽ tôi sẽ phải tự thêm một hoặc hai thuộc tính để cho phép tùy chỉnh điều khiển của mình:
[StyleTypedProperty(Thuộc tính = "ToggleButtonStyle", StyleTargetType = typeof(ToggleButton ) )]
[StyleTypedProperty(Thuộc tính = "DropDownBackgroundStyle", StyleTargetType = typeof(Biên giới) )]
lớp công khai DropDownButton: Kiểm soát
{
...
Kiểu công khai ToggleButtonStyle
{
nhận được { return (Style) GetValue( ToggleButtonStyleProperty }
đặt { SetValue(ToggleButtonStyleProperty, value });
}
công khai tĩnh chỉ đọc DependencyProperty ToggleButtonStyleProperty =
DependencyProperty.Register( "ToggleButtonStyle", typeof( Style ), typeof( DropDownButton ), null );
Kiểu công khai DropDownBackgroundStyle
{
nhận được { return (Style) GetValue( DropDownBackgroundStyleProperty }
đặt { SetValue( DropDownBackgroundStyleProperty, value });
}
công khai tĩnh chỉ đọc DependencyProperty DropDownBackgroundStyleProperty =
DependencyProperty.Register( "DropDownBackgroundStyle", typeof( Style ), typeof( DropDownButton ), null );
}
mô hình tinh thần: Khả năng tùy chỉnh/Khả năng sử dụng là thứ tôi phải tích hợp vào các điều khiển tùy chỉnh của mình.
Nếu trong một ứng dụng cụ thể (và một tập hợp khác), tôi cần các điều khiển của mình tuân theo một chủ đề (không đặt kiểu rõ ràng cho mỗi lần xuất hiện), tôi phải cung cấp một kiểu mặc định riêng, nhưng kiểu kiểu mặc định mới chỉ đặt các thuộc tính liên quan đến ngoại hình: Vì vậy, tôi sẽ thêm một cái gì đó như thế này vào App.xaml của mình:
<ứng dụng.tài="" nguyên="">
ứng>
mô hình tinh thần: Để áp dụng chủ đề trong một trong các ứng dụng cụ thể của mình, tôi phải "thêm lớp thứ hai" các kiểu mặc định ngầm định. Việc cung cấp lớp này là mối quan tâm của ứng dụng cụ thể của tôi chứ không phải thành phần điều khiển tùy chỉnh của tôi.
Tôi là một lập trình viên xuất sắc, rất giỏi!