Dot-Net

如何將視窗背景綁定到主題的視窗背景顏色?

  • October 20, 2009

如何將主題的預設視窗背景顏色綁定到視窗背景?

我嘗試了以下方法:

<Window x:Class="Shell"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   Title="Shell" 
   Height="300" 
   Width="300" 
   Background="{DynamicResource WindowBackgroundBrush}"
   >

但是背景顏色呈現為黑色,並且在使用 Luna 主題時看起來不正確。使用 Luna 主題,我希望 Windows XP 中經常出現米色/棕色。

**更新:**在閱讀了您的答案、使用StyleSnooper並對此進行了更多思考之後,我得出了以下結論:

預設情況下,視窗將使用 SystemColors.WindowBrush 作為其背景顏色。在我嘗試過的大多數主題中,這種顏色都是白色的,這可能沒問題。我相信白色也是 WinForms 中的視窗背景顏色。但是,WinForms 中預設的 Form 背景顏色不是 Window 背景而是 Control。所以,如果我想要LucasSystemColors.ControlBrush指出的那種顏色,我已經使用了。

有一次,我試圖在 Windows XP 上實現 WinForms 的棕色/米色控制顏色。這在 Windows Vista 上可能是不可能的,因為 Vista 上的控制顏色是灰色的。在 Windows Vista 上執行 WinForms 應用程序不會將其呈現為米色/棕色,而是灰色。在這種情況下,我想我們必須應用我們自己的自定義樣式才能在 Vista 上實現“原始”Windows XP 外觀。

謝謝大家幫我解決這個問題!

應用主題實際上是否會像我預期的那樣覆蓋系統畫筆?如果是這樣,你應該能夠做到這一點:

<Window ...
   Background="{x:Static SystemColors.WindowBrush}
   ...>

編輯

根據 Manga 的評論,您可能希望使用 SystemColors.ControlBrush 來實現所需的效果,因為大多數係統上的 WindowBrush 是白色的。ControlBrush 是您在 Windows XP 上看到的“灰白色”顏色。

我原以為只需在您的元素上保留未設置的Background屬性即可實現此目的。Window主題的全部意義在於它會影響視覺元素的預設外觀,例如您的Window.

編輯您可能會查看StyleSnooper - 它可以讓您查看控制項的預設模板(例如 Window)。您應該能夠確定它為每個主題綁定的屬性。

引用自:https://stackoverflow.com/questions/1513718