2017-11-04 179 views
3

我在我想修改的UWP項目中有一個ComboBox。我想更改包含ComboBoxItemsStackPanel(?)的背景顏色,但我還沒有找到實現此目的的簡單方法。如何更改組合框下拉菜單背景?

在這裏,我想要改變淺灰色填充的顏色。

Combobox open

顏色圍繞ComboBoxItems應該匹配,而是它是代表了默認的灰色。

下面是一個示例,其中MSN Money的ComboBox具有與ComboBoxItems匹配的自定義填充顏色。這是我希望實現的。

MSN Money Combobox

我用的是「填充」,但它實際上是包含ComboBoxItems元素的只是顏色。

據我所知,我必須修改Windows 10 SDK中提供的generics.xaml文件,但會修改我使用的所有ComboBox es。我可以創建一個繼承自ComboBox的自定義控件,但是當我想要改變這種顏色時,這不需要我編寫新的控件?必須有一個更簡單的方法來改變這一點。

@Bart這是我在ComboBox中的Popup模板中找到的代碼。我不確定在你的解釋中「SystemControlBackgroundChromeMediumLowBrush」來自哪裏。

<Popup x:Name="Popup"> 
    <Border x:Name="PopupBorder" 
     Background="{ThemeResource ComboBoxDropDownBackground}" 
     BorderBrush="{ThemeResource ComboBoxDropDownBorderBrush}" 
     BorderThickness="{ThemeResource ComboBoxDropdownBorderThickness}" 

回答

2

您應該永遠不要觸摸SDK文件夾中的generics.xaml文件,這是一個「系統文件」。這就像更改Windows安裝中的某個文件以更改圖標瀏覽器(並可能導致其他應用程序更改此設置)。

有多種解決方案:

  • 在自己的應用程序Edit the control's template(與Visual Studio,混合或通過簡單地複製default template如果你讓它無名(命名通過設置x:Key模板)也將被應用。您所有ComboBox上課。如果你只想要一些改變,你應該給它一個密鑰,並用它作爲StaticResource

的一塊你正在尋找的代碼是在模板中的彈出式菜單控件。

<Popup x:Name="Popup"> 
    <Border 
     x:Name="PopupBorder" 
     Background="{ThemeResource SystemControlBackgroundChromeMediumLowBrush}" 
     BorderBrush="{ThemeResource SystemControlForegroundChromeHighBrush}" 
     BorderThickness="{ThemeResource ComboBoxDropdownBorderThickness}" 
     Margin="0,-1,0,-1" 
     HorizontalAlignment="Stretch"> 
  • 重寫ThemeResource給它另一種顏色。請注意,這會對您的應用中的其他控件使用相同的ThemeResource產生影響。但是,這比改變generics.xaml和更少的工作比重新定義模板要好得多。

這是通過重新定義資源密鑰完成的。

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.ThemeDictionaries> 
      <ResourceDictionary x:Key="Dark"> 
       <SolidColorBrush x:Key="SystemControlBackgroundChromeMediumLowBrush" Color="DarkGray" /> 
      </ResourceDictionary> 
     </ResourceDictionary.ThemeDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 
+0

第二個解決方案沒有奏效,直到我意識到App.xaml有一行手動將RequestedTheme設置爲Light,我立即將其刪除。我試圖創建一個模板,但是這對我的控件沒有影響。 至於第一個XAML塊,你從哪裏複製的? – Mapplesoft

+0

XAML的第一個塊來自默認模板(鏈接在答案中)。要使用自己創建的模板,請閱讀答案中的鏈接,因爲它應該可以工作(使用鍵+ StaticResource或重新定義應用中所有控件的默認模板)。但我很高興你至少能夠以第二種方式工作。 – Bart