2009-02-12 21 views
6

Nếu tôi tạo điều khiển tùy chỉnh với WPF, làm thế nào tôi có thể cung cấp kiểu cho điều khiển phù hợp với chủ đề hiện đang được áp dụng (Aero, Luna, Classic, v.v.)?Làm cách nào để kết hợp các kiểu điều khiển của tôi với chủ đề hiện tại? (WPF)

Ví dụ tôi muốn áp dụng sau khi sử dụng Aero:

<Style> 
    <Setter Property="Background" Value="White"/> 
</Style> 

Nhưng sau đó áp dụng một phong cách khác nhau khi sử dụng Luna:

<Style> 
    <Setter Property="Background" Value="#DFDFDF"/> 
</Style> 

Tôi có thể bằng cách nào đó mở rộng các chủ đề cơ sở để cung cấp hỗ trợ cho kiểm soát mới của tôi?

Trả lời

7

Một số liên kết có thể được chứng minh hữu ích:

http://arbel.net/blog/archive/2006/11/03/Forcing-WPF-to-use-a-specific-Windows-theme.aspx

http://www.browsoft.com/tutorials/DefaultTheme.html

http://blogs.msdn.com/wpfsdk/archive/2007/07/31/using-themes-with-custom-controls.aspx

Về cơ bản bạn tạo các từ điển tài nguyên cho các điều khiển tùy chỉnh của bạn được đặt tên như thế này:

Classic.xaml (“Classic” Windows 9x/2000 look on Windows XP.) 
Luna.NormalColor.xaml (Default blue theme on Windows XP.) 
Luna.Homestead.xaml (Olive theme on Windows XP.) 
Luna.Metallic.xaml (Silver theme on Windows XP.) 
Royale.NormalColor.xaml (Default theme on the Windows XP Media Center Edition operating system.) 
Aero.NormalColor.xaml (Default theme on the Windows Vista operating system.) 

Đặt các kiểu khác nhau cho các điều khiển của bạn trong các tệp đó và chúng sẽ được tải dựa trên chủ đề hiện tại của hệ điều hành.

+0

Các liên kết này hữu ích, cảm ơn. Điểm mấu chốt đối với tôi là một sự thay đổi trong AssemblyInfo.cs - chuyển đổi themeDictionaryLocation của thuộc tính [ThemeInfo] từ 'None' thành 'SourceAssembly'. – ajlane

0

Bạn có thể sử dụng các chủ đề khác nhau trong WPF bằng cách tải/dỡ các từ điển tài nguyên. Các từ điển này phải chứa các kiểu cho các điều khiển của bạn. Khi bạn trao đổi các từ điển, WPF sẽ áp dụng các kiểu cho các điều khiển của bạn.

ví dụ: nếu đây là trong WhiteStyle.xaml và bạn đã tải nó, tất cả textblocks của bạn sẽ hiển thị văn bản bằng phông chữ màu trắng.

<Style TargetType="TextBlock"> 
    <Setter Property="Foreground" Value="White"/> 
</Style> 

nếu bạn đổi nó ra cho BlackStyle.xaml chứa

<Style TargetType="TextBlock"> 
    <Setter Property="Foreground" Value="Black"/> 
</Style> 

TextBlocks của bạn sẽ hiển thị văn bản trong một phông chữ màu đen màu. WPF xử lý rất nhiều chi tiết cho chúng tôi, chúng tôi chỉ cần nói cho nó biết chi tiết là gì.

Hoán đổi từ điển tài nguyên là thực sự đơn giản và tôi để điều đó cho bạn tìm ra. Googling "WPF Themes" là một nơi tốt để bắt đầu.

Các vấn đề liên quan