Thật dễ dàng!Làm cách nào để chuyển một chủ đề từ Silverlight sang WPF?
Tôi vừa xem qua số this blog post by Rudi Grobler cho biết việc chuyển một chủ đề từ Silverlight sang WPF thật dễ dàng. Thật không may, anh ấy không nói làm thế nào để làm điều đó.
Tải về và cài đặt
Tôi đã cài đặt cả WPF Toolkit và Silverlight Toolkit từ CodePlex.
Tôi cũng đã đi và đào lên the source code for the theme I'm interested in (BureauBlue) (cảnh báo, quá trình này mất chút thời gian để tải) và dán vào tệp Tài nguyên từ điển mới trong dự án thử nghiệm của tôi.
Út oh, tài liệu tham khảo gãy
Rất nhiều dòng màu xanh nguệch ngoạc.
alt text http://img32.imageshack.us/img32/6032/brokenreferences.jpg
Không tài liệu tham khảo ở đây
Vì vậy, tôi đã đi để thêm tài liệu tham khảo và khám phá ra ... họ không được liệt kê.
alt text http://img35.imageshack.us/img35/7466/addreferencedialog.jpg
Ahh, có họ là
May mắn thay, tôi đã có thể tìm thấy chúng sau khi một số mở rộng duyệt.
alt text http://img269.imageshack.us/img269/3830/addreferencedialogbrows.jpg
Và như vậy chúng tôi được gửi
Sau khi tìm thấy các tài liệu tham khảo còn thiếu, tôi đã cố gắng để thêm chúng. Điều này thực sự dường như để giải quyết chia xmlns
liên kết (ít nhất là các dòng nguệch ngoạc màu xanh ra đi), nhưng khi tôi đã xây dựng dự án của tôi, tôi đã nhận ra lỗi:
Error 1 Unknown build error, 'Cannot resolve dependency to assembly 'System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' because it has not been preloaded. When using the ReflectionOnly APIs, dependent assemblies must be pre-loaded or loaded on demand through the ReflectionOnlyAssemblyResolve event.' NmtConcept
Và, vì vậy tôi hỏi ...
Làm cách nào để tạo chủ đề Silverlight hoạt động trong WPF?
Cập nhật!
Vâng, tôi nghĩ tôi đã tìm ra. Tôi quyết định bắt đầu với DataGrid
.Tôi đã tìm ra tất cả những gì tương đương với WPF dành cho các hội đồng Silverlight, và tôi thực sự có dự án biên dịch và chạy. Và sau đó tôi thấy kết quả ...
alt text http://img44.imageshack.us/img44/2418/porteddatagrid.jpg
Tiêu đề có phần đúng (trừ các mũi tên loại mất tích), nhưng phần còn lại của nó trông giống như là có một số loại tai nạn khủng khiếp liên quan đến viên gạch màu nâu .
Đây là ví dụ về số Silverlight Toolkit webpage.
alt text http://img196.imageshack.us/img196/997/silverlightdatagrid.jpg
Vì vậy, tôi thậm chí không đến gần.
Những gì tôi đã làm
Xin cho phép tôi giải thích những gì tôi đã làm để đi đến đống lộn xộn này.
DataGridFrozenGrid
Trước tiên, tôi đã phải lấy DataGridFrozenGrid
từ this Silverlight Toolkit source code page vì WPF chưa bao giờ nghe nói về một lớp học như vậy.
BureauBlue
Sau đó, tôi dán trong phần quan trọng từ the source code for BureauBlue (một lần nữa, cảnh báo: em bé này là chậm để tải).
By phần quan trọng, ý tôi là:
- Tất cả các nguồn lực bàn chải vào đầu của tập tin cộng với
Các
Style
cho mỗi người trong số các điều khiển:- DataGridColumnHeader
- DataGridCell
- DataGridRowHeader
- DataGridRow
Kỳ lạ thay, các tập tin ban đầu không chứa kiểu cho DataGrid
bản thân (hãy sửa lại cho tôi nếu tôi sai, nhưng tôi sử dụng Tìm và tất cả mọi thứ).
Silverlight -> WPF
Tiếp theo, tôi chuyển đổi các tài liệu tham khảo xmlns
để WPF tương đương.Dưới đây là cách phần tử ResourceDictionary
của tôi bật ra:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mwc="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit"
xmlns:mwcp="clr-namespace:Microsoft.Windows.Controls.Primitives;assembly=WPFToolkit"
xmlns:swcp="clr-namespace:System.Windows.Controls.Primitives;assembly=CommonLibraryWpf"
xmlns:sw="clr-namespace:System.Windows;assembly=WPFToolkit">
Tôi tất nhiên đã chỉnh sửa thẻ không gian tên để khớp.
Chỉnh sửa cho đến khi nó hoạt động
Một khi tôi đã có tất cả làm việc này, tôi vẫn có một vài vấn đề nhỏ. Một số phần tử x:Name
có khoảng trống trong chúng. Trình biên dịch sẽ không cho phép điều này, vì vậy tôi phải thay thế các dấu cách bằng dấu gạch dưới.
Dưới đây là các đoạn có liên quan:
<!-- Important: all underscores used to be spaces -->
<sw:VisualState
x:Name="MouseOver_CurrentRow_Selected">
<sw:VisualState
x:Name="Normal_CurrentRow">
<sw:VisualState
x:Name="Normal_Selected">
<sw:VisualState
x:Name="Normal_EditingRow">
<sw:VisualState
x:Name="Normal_AlternatingRow" />
<sw:VisualState
x:Name="Normal_Selected">
<sw:VisualState
x:Name="MouseOver_Selected">
<sw:VisualState
x:Name="Unfocused_Selected">
Thay đổi các tên này dường như là một ý tưởng rất xấu - và có thể là nguyên nhân của mọi vấn đề của tôi - nhưng tôi không biết làm gì khác để có được thứ để biên dịch.
Sự thay đổi khác mà tôi phải thực hiện là: một số các mục SolidColorBrush
và LinearGradientBrush
ở đầu sử dụng x:Name
thay vì x:Key
. Tôi đã thay đổi tất cả chúng thành x:Key
. Có lẽ đây cũng là một ý tưởng tồi, nhưng một lần nữa, trình biên dịch đã làm tôi.
Điều này có giúp bạn giúp tôi không?
Nếu bạn vẫn ở bên tôi sau tất cả, có đề xuất nào không?
Ahh, có ý nghĩa. Tôi thực sự có từ điển tài nguyên cho BureauBlue từ dự án WPF Themes, nhưng nó không chứa các kiểu cho 'DataGrid',' DataPicker' và 'Calendar'. – devuxer
Vâng, tôi đã cho một shot (xem cập nhật cho câu hỏi của tôi), nhưng nó đã không làm việc quá tốt. – devuxer