我需要在Windows 10上更改WPF comboBox背景。处理此问题的一个解决方案是从控件模板修改border.Background。
代码段如下所示
private void ChangeBackground(object sender)
{
var osInfo = System.Environment.OSVersion;
// Version > Windows 7 (6.1) ?
// https://msdn.microsoft.com/zh-tw/library/windows/desktop/ms724832(v=vs.85).aspx
if (osInfo.Version.Major < 6 || osInfo.Version.Minor < 2) return;
var comboBox = sender as ComboBox;
if (comboBox == null) return;
var comboBoxTemplate = comboBox.Template;
if (comboBoxTemplate == null) return;
var toggleButton = comboBoxTemplate.FindName("toggleButton", comboBox) as ToggleButton;
if (toggleButton == null) return;
var toggleButtonTemplate = toggleButton.Template;
var border = toggleButtonTemplate.FindName("templateRoot", toggleButton) as Border;
if (border == null) return;
// IsEnable?
border.Background = (((ComboBox)(sender)).IsEnabled == false)
? (SolidColorBrush)(new BrushConverter().ConvertFrom("#FFF0F0F0"))
: comboBox.Background;
}
但是在调用VisibilityChanged事件时,toggleButton为null。 现在我通过计时器来解决。它很好但很脏。
有人可以提供任何建议吗?感谢。
答案 0 :(得分:0)
当ToggleButton
折叠时,您无法获得对ComboBox
的引用,因为它已从可见树中删除,因此没有ToggleButton
到ComboBox
得到一个参考。
解决此问题的正确方法是覆盖XAML中ToggleButton
/ ComboBox
的控件模板。
您可以在Visual Studio中以设计模式右键单击asyncio
元素,然后选择&#34;编辑模板&#34;选项,然后&#34;编辑副本......&#34;选项将默认模板复制到XAML标记中,然后根据您的要求进行修改。这是比使用计时器更好的解决方案...有关此更多信息,请参阅以下链接。
在Windows 8上更改WPF中ComboBox的背景颜色: https://blog.magnusmontin.net/2014/04/30/changing-the-background-colour-of-a-combobox-in-wpf-on-windows-8/