洛阳网站建设学校,佛山移动网站设计,中国建设企业网站,长春做网站要多少钱直接修改Background属性不可行
修改控件背景颜色#xff0c;很多人第一反应便是修改Background属性#xff0c;但是修改过后便会发现#xff0c;控件的颜色没有发生任何变化。 于是在网上搜索答案#xff0c;便会发现一个异常尴尬的情况#xff0c;要么就行代码简单但是并…直接修改Background属性不可行
修改控件背景颜色很多人第一反应便是修改Background属性但是修改过后便会发现控件的颜色没有发生任何变化。 于是在网上搜索答案便会发现一个异常尴尬的情况要么就行代码简单但是并不管用要么就是虽然管用但是要添加一大堆的样式代码而且修改的样式不仅是背景色边框字体几乎所有的样式都被修改了。
我只想修改背景色这一个样式而已就这么一个简简单单的要求为什么要加这么多代码 最气人的是网上还没有单独修改背景颜色的方法。要改样式就逼你全部一起修改。
这是wpf的模板的特性导致的相比于修改全套的样式保留原有样式仅仅修改背景色的话反而要添加最多的代码这也是为何网上目前没有仅修改背景色的方法。
控件的模板
在刚接触wpf的时候你可能会认为这个和winform框架差不多每个控件都是相互独立的。但是如果你了解了控件的模板也就是ControlTemplate属性你就会发现wpf框架的页面布局方式其实和html更像绝大数控件都是可以嵌套的。
这也是为何修改Background属性后ComboBox的背景色没有变化。因为ComboBox.ControlTemplate属性默认值不为null它里面自带的嵌套控件覆盖了你修改的背景颜色所以最后展示出来背景颜色没有任何变化。
但是微软仅提供了设置新模板的方法并没有提供修改原有默认模板的方法。 也就是说要修改背景颜色你就必须设计一套全新的模板来替换掉原有的模板。这也是为什么网上提供的修改背景颜色的方法都连带着修改了所有的样式因为从头设计模板就意味着从头放置所有需要的嵌套控件从头设计所有的样式。
唯一仅修改背景颜色的方式便是将原有模板拷贝一份在此基础上进行修改。
背景颜色修改
由于模板太大这里建议放到单独的文件中。
ComboBox Grid.Row0 Template{DynamicResource ComboBoxDiyTemplate}ComboBox.ResourcesResourceDictionary Source/Style/ComboboxDiy.xaml//ComboBox.Resources
/ComboBox然后在ComboboxDiy.xaml文件中修改背景颜色
ResourceDictionary xmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:themeclr-namespace:Microsoft.Windows.Themes;assemblyPresentationFramework.Aero2!-- 重写ComboBox的样式和模板 --LinearGradientBrush x:KeyComboBox.Static.Background EndPoint0,1 StartPoint0,0GradientStop Color#FFF0F0F0 Offset0.0/GradientStop Color#FFE5E5E5 Offset1.0//LinearGradientBrushSolidColorBrush x:KeyComboBox.Static.Border Color#FFACACAC/SolidColorBrush x:KeyComboBox.Static.Glyph Color#FF606060/SolidColorBrush x:KeyComboBox.Static.Editable.Background Color#FFFFFFFF/SolidColorBrush x:KeyComboBox.Static.Editable.Border Color#FFABADB3/SolidColorBrush x:KeyComboBox.Static.Editable.Button.Background ColorTransparent/SolidColorBrush x:KeyComboBox.Static.Editable.Button.Border ColorTransparent/LinearGradientBrush x:KeyComboBox.MouseOver.Background EndPoint0,1 StartPoint0,0GradientStop Color#FFECF4FC Offset0.0/GradientStop Color#FFDCECFC Offset1.0//LinearGradientBrushSolidColorBrush x:KeyComboBox.MouseOver.Border Color#FF7EB4EA/SolidColorBrush x:KeyComboBox.MouseOver.Glyph Color#FF000000/SolidColorBrush x:KeyComboBox.MouseOver.Editable.Background Color#FFFFFFFF/SolidColorBrush x:KeyComboBox.MouseOver.Editable.Border Color#FF7EB4EA/LinearGradientBrush x:KeyComboBox.MouseOver.Editable.Button.Background EndPoint0,1 StartPoint0,0GradientStop Color#FFEBF4FC Offset0.0/GradientStop Color#FFDCECFC Offset1.0//LinearGradientBrushSolidColorBrush x:KeyComboBox.MouseOver.Editable.Button.Border Color#FF7EB4EA/LinearGradientBrush x:KeyComboBox.Pressed.Background EndPoint0,1 StartPoint0,0GradientStop Color#FFDAECFC Offset0.0/GradientStop Color#FFC4E0FC Offset1.0//LinearGradientBrushSolidColorBrush x:KeyComboBox.Pressed.Border Color#FF569DE5/SolidColorBrush x:KeyComboBox.Pressed.Glyph Color#FF000000/SolidColorBrush x:KeyComboBox.Pressed.Editable.Background Color#FFFFFFFF/SolidColorBrush x:KeyComboBox.Pressed.Editable.Border Color#FF569DE5/LinearGradientBrush x:KeyComboBox.Pressed.Editable.Button.Background EndPoint0,1 StartPoint0,0GradientStop Color#FFDAEBFC Offset0.0/GradientStop Color#FFC4E0FC Offset1.0//LinearGradientBrushSolidColorBrush x:KeyComboBox.Pressed.Editable.Button.Border Color#FF569DE5/SolidColorBrush x:KeyComboBox.Disabled.Background Color#FFF0F0F0/SolidColorBrush x:KeyComboBox.Disabled.Border Color#FFD9D9D9/SolidColorBrush x:KeyComboBox.Disabled.Glyph Color#FFBFBFBF/SolidColorBrush x:KeyComboBox.Disabled.Editable.Background Color#FFFFFFFF/SolidColorBrush x:KeyComboBox.Disabled.Editable.Border Color#FFBFBFBF/SolidColorBrush x:KeyComboBox.Disabled.Editable.Button.Background ColorTransparent/SolidColorBrush x:KeyComboBox.Disabled.Editable.Button.Border ColorTransparent/Style x:KeyComboBoxToggleButton TargetType{x:Type ToggleButton}Setter PropertyOverridesDefaultStyle Valuetrue/Setter PropertyIsTabStop Valuefalse/Setter PropertyFocusable Valuefalse/Setter PropertyClickMode ValuePress/Setter PropertyTemplateSetter.ValueControlTemplate TargetType{x:Type ToggleButton}!-- 在下面的Border中修改背景颜色 当前案例中为白色White --Border x:NametemplateRoot BackgroundWhite BorderBrush{StaticResource ComboBox.Static.Border} BorderThickness{TemplateBinding BorderThickness} SnapsToDevicePixelstrueBorder x:NamesplitBorder BorderBrushTransparent BorderThickness1 HorizontalAlignmentRight Margin0 SnapsToDevicePixelstrue Width{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}Path x:Namearrow DataF1 M 0,0 L 2.667,2.66665 L 5.3334,0 L 5.3334,-1.78168 L 2.6667,0.88501 L0,-1.78168 L0,0 Z Fill{StaticResource ComboBox.Static.Glyph} HorizontalAlignmentCenter Margin0 VerticalAlignmentCenter//Border/BorderControlTemplate.TriggersMultiDataTriggerMultiDataTrigger.ConditionsCondition Binding{Binding IsEditable, RelativeSource{RelativeSource AncestorType{x:Type ComboBox}}} Valuetrue/Condition Binding{Binding IsMouseOver, RelativeSource{RelativeSource ModeSelf}} Valuefalse/Condition Binding{Binding IsPressed, RelativeSource{RelativeSource ModeSelf}} Valuefalse/Condition Binding{Binding IsEnabled, RelativeSource{RelativeSource ModeSelf}} Valuetrue//MultiDataTrigger.ConditionsSetter PropertyBackground TargetNametemplateRoot Value{StaticResource ComboBox.Static.Editable.Background}/Setter PropertyBorderBrush TargetNametemplateRoot Value{StaticResource ComboBox.Static.Editable.Border}/Setter PropertyBackground TargetNamesplitBorder Value{StaticResource ComboBox.Static.Editable.Button.Background}/Setter PropertyBorderBrush TargetNamesplitBorder Value{StaticResource ComboBox.Static.Editable.Button.Border}//MultiDataTriggerTrigger PropertyIsMouseOver ValuetrueSetter PropertyFill TargetNamearrow Value{StaticResource ComboBox.MouseOver.Glyph}//TriggerMultiDataTriggerMultiDataTrigger.ConditionsCondition Binding{Binding IsMouseOver, RelativeSource{RelativeSource ModeSelf}} Valuetrue/Condition Binding{Binding IsEditable, RelativeSource{RelativeSource AncestorType{x:Type ComboBox}}} Valuefalse//MultiDataTrigger.ConditionsSetter PropertyBackground TargetNametemplateRoot Value{StaticResource ComboBox.MouseOver.Background}/Setter PropertyBorderBrush TargetNametemplateRoot Value{StaticResource ComboBox.MouseOver.Border}//MultiDataTriggerMultiDataTriggerMultiDataTrigger.ConditionsCondition Binding{Binding IsMouseOver, RelativeSource{RelativeSource ModeSelf}} Valuetrue/Condition Binding{Binding IsEditable, RelativeSource{RelativeSource AncestorType{x:Type ComboBox}}} Valuetrue//MultiDataTrigger.ConditionsSetter PropertyBackground TargetNametemplateRoot Value{StaticResource ComboBox.MouseOver.Editable.Background}/Setter PropertyBorderBrush TargetNametemplateRoot Value{StaticResource ComboBox.MouseOver.Editable.Border}/Setter PropertyBackground TargetNamesplitBorder Value{StaticResource ComboBox.MouseOver.Editable.Button.Background}/Setter PropertyBorderBrush TargetNamesplitBorder Value{StaticResource ComboBox.MouseOver.Editable.Button.Border}//MultiDataTriggerTrigger PropertyIsPressed ValuetrueSetter PropertyFill TargetNamearrow Value{StaticResource ComboBox.Pressed.Glyph}//TriggerMultiDataTriggerMultiDataTrigger.ConditionsCondition Binding{Binding IsPressed, RelativeSource{RelativeSource ModeSelf}} Valuetrue/Condition Binding{Binding IsEditable, RelativeSource{RelativeSource AncestorType{x:Type ComboBox}}} Valuefalse//MultiDataTrigger.ConditionsSetter PropertyBackground TargetNametemplateRoot Value{StaticResource ComboBox.Pressed.Background}/Setter PropertyBorderBrush TargetNametemplateRoot Value{StaticResource ComboBox.Pressed.Border}//MultiDataTriggerMultiDataTriggerMultiDataTrigger.ConditionsCondition Binding{Binding IsPressed, RelativeSource{RelativeSource ModeSelf}} Valuetrue/Condition Binding{Binding IsEditable, RelativeSource{RelativeSource AncestorType{x:Type ComboBox}}} Valuetrue//MultiDataTrigger.ConditionsSetter PropertyBackground TargetNametemplateRoot Value{StaticResource ComboBox.Pressed.Editable.Background}/Setter PropertyBorderBrush TargetNametemplateRoot Value{StaticResource ComboBox.Pressed.Editable.Border}/Setter PropertyBackground TargetNamesplitBorder Value{StaticResource ComboBox.Pressed.Editable.Button.Background}/Setter PropertyBorderBrush TargetNamesplitBorder Value{StaticResource ComboBox.Pressed.Editable.Button.Border}//MultiDataTriggerTrigger PropertyIsEnabled ValuefalseSetter PropertyFill TargetNamearrow Value{StaticResource ComboBox.Disabled.Glyph}//TriggerMultiDataTriggerMultiDataTrigger.ConditionsCondition Binding{Binding IsEnabled, RelativeSource{RelativeSource ModeSelf}} Valuefalse/Condition Binding{Binding IsEditable, RelativeSource{RelativeSource AncestorType{x:Type ComboBox}}} Valuefalse//MultiDataTrigger.ConditionsSetter PropertyBackground TargetNametemplateRoot Value{StaticResource ComboBox.Disabled.Background}/Setter PropertyBorderBrush TargetNametemplateRoot Value{StaticResource ComboBox.Disabled.Border}//MultiDataTriggerMultiDataTriggerMultiDataTrigger.ConditionsCondition Binding{Binding IsEnabled, RelativeSource{RelativeSource ModeSelf}} Valuefalse/Condition Binding{Binding IsEditable, RelativeSource{RelativeSource AncestorType{x:Type ComboBox}}} Valuetrue//MultiDataTrigger.ConditionsSetter PropertyBackground TargetNametemplateRoot Value{StaticResource ComboBox.Disabled.Editable.Background}/Setter PropertyBorderBrush TargetNametemplateRoot Value{StaticResource ComboBox.Disabled.Editable.Border}/Setter PropertyBackground TargetNamesplitBorder Value{StaticResource ComboBox.Disabled.Editable.Button.Background}/Setter PropertyBorderBrush TargetNamesplitBorder Value{StaticResource ComboBox.Disabled.Editable.Button.Border}//MultiDataTrigger/ControlTemplate.Triggers/ControlTemplate/Setter.Value/Setter/StyleControlTemplate x:KeyComboBoxDiyTemplate TargetType{x:Type ComboBox}Grid x:NametemplateRoot SnapsToDevicePixelstrueGrid.ColumnDefinitionsColumnDefinition Width*/ColumnDefinition MinWidth{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}} Width0//Grid.ColumnDefinitionsPopup x:NamePART_Popup AllowsTransparencytrue Grid.ColumnSpan2 IsOpen{Binding IsDropDownOpen, ModeTwoWay, RelativeSource{RelativeSource ModeTemplatedParent}} Margin1 PlacementBottom PopupAnimation{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}theme:SystemDropShadowChrome x:Nameshadow ColorTransparent MinWidth{Binding ActualWidth, ElementNametemplateRoot} MaxHeight{TemplateBinding MaxDropDownHeight}Border x:NamedropDownBorder Background{DynamicResource {x:Static SystemColors.WindowBrushKey}} BorderBrush{DynamicResource {x:Static SystemColors.WindowFrameBrushKey}} BorderThickness1ScrollViewer x:NameDropDownScrollViewerGrid x:Namegrid RenderOptions.ClearTypeHintEnabledCanvas x:Namecanvas HorizontalAlignmentLeft Height0 VerticalAlignmentTop Width0Rectangle x:NameopaqueRect Fill{Binding Background, ElementNamedropDownBorder} Height{Binding ActualHeight, ElementNamedropDownBorder} Width{Binding ActualWidth, ElementNamedropDownBorder}//CanvasItemsPresenter x:NameItemsPresenter KeyboardNavigation.DirectionalNavigationContained SnapsToDevicePixels{TemplateBinding SnapsToDevicePixels}//Grid/ScrollViewer/Border/theme:SystemDropShadowChrome/PopupToggleButton x:NametoggleButton Background{TemplateBinding Background} BorderBrush{TemplateBinding BorderBrush} BorderThickness{TemplateBinding BorderThickness} Grid.ColumnSpan2 IsChecked{Binding IsDropDownOpen, ModeTwoWay, RelativeSource{RelativeSource ModeTemplatedParent}} Style{StaticResource ComboBoxToggleButton}/ContentPresenter x:NamecontentPresenter ContentStringFormat{TemplateBinding SelectionBoxItemStringFormat} ContentTemplate{TemplateBinding SelectionBoxItemTemplate} Content{TemplateBinding SelectionBoxItem} ContentTemplateSelector{TemplateBinding ItemTemplateSelector} HorizontalAlignment{TemplateBinding HorizontalContentAlignment} IsHitTestVisiblefalse Margin{TemplateBinding Padding} SnapsToDevicePixels{TemplateBinding SnapsToDevicePixels} VerticalAlignment{TemplateBinding VerticalContentAlignment}//GridControlTemplate.TriggersTrigger PropertyHasDropShadow SourceNamePART_Popup ValuetrueSetter PropertyMargin TargetNameshadow Value0,0,5,5/Setter PropertyColor TargetNameshadow Value#71000000//TriggerTrigger PropertyHasItems ValuefalseSetter PropertyHeight TargetNamedropDownBorder Value95//TriggerMultiTriggerMultiTrigger.ConditionsCondition PropertyIsGrouping Valuetrue/Condition PropertyVirtualizingPanel.IsVirtualizingWhenGrouping Valuefalse//MultiTrigger.ConditionsSetter PropertyScrollViewer.CanContentScroll Valuefalse//MultiTriggerTrigger PropertyScrollViewer.CanContentScroll SourceNameDropDownScrollViewer ValuefalseSetter PropertyCanvas.Top TargetNameopaqueRect Value{Binding VerticalOffset, ElementNameDropDownScrollViewer}/Setter PropertyCanvas.Left TargetNameopaqueRect Value{Binding HorizontalOffset, ElementNameDropDownScrollViewer}//Trigger/ControlTemplate.Triggers/ControlTemplate
/ResourceDictionary