Đối với những người này phải vật lộn với một giải pháp cho vấn đề: Làm thế nào tôi có thể có một phong cách tùy chỉnh được automtically áp dụng cho tất cả các cửa sổ có nguồn gốc loại của tôi? Dưới đây là giải pháp tôi đã đưa ra
LƯU Ý: Tôi thực sự không muốn lấy được từ loại Cửa sổ hoặc phải chèn XAML trên mỗi cửa sổ để buộc cập nhật kiểu, v.v.vì lý do cụ thể cho dự án của tôi (người tiêu dùng sản phẩm của tôi cho chúng tôi thư viện kiểu tái sử dụng chung của tôi và tạo bố cục/cửa sổ riêng của họ, v.v.) tôi đã thực sự động cơ để tìm ra giải pháp mà tôi sẵn sàng sống với bất kỳ bên nào hiệu ứng
Cần lặp qua tất cả các cửa sổ đã được khởi tạo và đơn giản buộc chúng sử dụng kiểu tùy chỉnh mới mà bạn đã xác định cho loại Cửa sổ. Điều này làm việc tuyệt vời cho các cửa sổ đã được lên nhưng khi một cửa sổ hoặc cửa sổ con được khởi tạo nó sẽ không biết sử dụng kiểu mới/tùy chỉnh đã được khai báo cho kiểu cơ sở của nó; loại cửa sổ vanilla. Vì vậy, tốt nhất tôi có thể đưa ra là sử dụng LostKeyBoardFocus trên MainWindow khi nó mất Focus đến ChildWindow (IOW Khi một cửa sổ con đã được tạo) và sau đó gọi ra FixupWindowDerivedTypes() này.
Nếu ai đó có giải pháp tốt hơn để "phát hiện" khi bất kỳ loại kiểu xuất phát cửa sổ nào được khởi tạo và do đó hãy gọi cho FixupWindowDerivedTypes() sẽ tuyệt vời. Có thể có điều gì đó hữu ích khi xử lý WM_WINDOWPOSCHANGING trong khu vực này.
Vì vậy, giải pháp này là không thanh lịch cho mỗi nói nhưng được công việc làm mà không cần tôi phải chạm vào bất kỳ mã hoặc XAML liên quan đến cửa sổ của tôi.
public static void FixupWindowDerivedTypes()
{
foreach (Window window in Application.Current.Windows)
{
//May look strange but kindly inform each of your window derived types to actually use the default style for the window type
window.SetResourceReference(FrameworkElement.StyleProperty, DefaultStyleKeyRetriever.GetDefaultStyleKey(window));
}
}
}
}
//Great little post here from Jafa to retrieve a protected property like DefaultStyleKey without using reflection.
http://themechanicalbride.blogspot.com/2008/11/protected-dependency-properties-are-not.html
//Helper class to retrieve a protected property so we can set it
internal class DefaultStyleKeyRetriever : Control
{
/// <summary>
/// This method retrieves the default style key of a control.
/// </summary>
/// <param name="control">The control to retrieve the default style key
/// from.</param>
/// <returns>The default style key of the control.</returns>
public static object GetDefaultStyleKey(Control control)
{
return control.GetValue(Control.DefaultStyleKeyProperty);
}
}
Vâng, tôi chỉ gặp phải vấn đề tương tự. Gishu nói ở trên rằng có vẻ như phong cách tiềm ẩn cho Window sẽ không áp dụng cho cửa sổ của bạn, vì nó thực sự là một lớp dẫn xuất. –