![](/img/trans.png)
[英]Is there any way to change the background color of the ComboBox control with DropDownList in Windows Forms
[英]Change ComboBox background color in Windows 8
如何更改Combobox.Background? 由於Windows 8 ComboBox.Background=Brushes.Red
對ComboBox沒有影響
我偶然遇到了同樣的問題,這把我帶到這里。
Alex的回答給了我一個主意,在研究了Windows 8 ComboBox的控件模板后,我得出了以下解決方案:
private void ComboBox_Loaded(Object sender, RoutedEventArgs e)
{
var comboBox = sender as ComboBox;
var comboBoxTemplate = comboBox.Template;
var toggleButton = comboBoxTemplate.FindName("toggleButton", comboBox) as ToggleButton;
var toggleButtonTemplate = toggleButton.Template;
var border = toggleButtonTemplate.FindName("templateRoot", toggleButton) as Border;
border.Background = new SolidColorBrush(Colors.Red);
}
該解決方案的優點是,它非常簡單明了,但它有一個缺點:它似乎覆蓋了所有狀態,因此,鼠標懸停等幾乎沒有視覺反饋。 如果我有更好的主意,我將編輯答案。
只需確保添加一些錯誤檢查,因為一旦在非Windows 8.x的系統上執行代碼,或者Microsoft是否曾嘗試解決相關問題並修改模板,該檢查就會失敗,並且很可能會失敗。 。
我知道已經晚了,但是我找到了解決它的方法。 只需使用更正后的ComboBox。
using System.Windows.Controls;
using System.Windows;
using System.Windows.Data;
namespace Utils {
class ComboBoxWin8 : ComboBox {
public ComboBoxWin8() {
Loaded += ComboBoxWin8_Loaded;
}
void ComboBoxWin8_Loaded(object sender, RoutedEventArgs e) {
ControlTemplate ct = Template;
Border border = ct.FindName("Border", this) as Border;
// if Windows8
if (border != null) {
border.Background = Background;
// In the case of bound property
BindingExpression be = GetBindingExpression(ComboBoxWin8.BackgroundProperty);
if (be != null) {
border.SetBinding(Border.BackgroundProperty, be.ParentBindingBase);
}
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.