积极答复者
自定义combobox控件时 悬停在控件上会变回原来的样式。。

问题
答案
-
这个是由于ComboBox默认模板里面的本身是一个ToggleButton,他的样式模板中有个 ButtonChrome 元素的 RenderMouseOver="{TemplateBinding IsMouseOver}" RenderPressed="{TemplateBinding IsPressed}" 这两个属性,他们导致这个效果,所以你手动设置的背景样式在ButtonChrome上就无效了。 解决方法,你要写一个你的自定义ComboBox,去掉这两个属性就可以了:
<Window.Resources> <ControlTemplate x:Key="Template1" TargetType="ComboBox"> <Grid Name="MainGrid" SnapsToDevicePixels="True"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition MinWidth="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}" Width="0" /> </Grid.ColumnDefinitions> <Popup AllowsTransparency="True" Grid.ColumnSpan="2" IsOpen="{Binding Path=IsDropDownOpen, RelativeSource={RelativeSource TemplatedParent}}" Margin="1" Name="PART_Popup" Placement="Bottom" PopupAnimation="{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}"> <my:SystemDropShadowChrome Color="Transparent" MaxHeight="{TemplateBinding ComboBox.MaxDropDownHeight}" MinWidth="{Binding Path=ActualWidth, ElementName=MainGrid}" Name="Shdw"> <Border Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}" BorderBrush="{DynamicResource {x:Static SystemColors.WindowFrameBrushKey}}" BorderThickness="1" Name="DropDownBorder"> <ScrollViewer Name="DropDownScrollViewer"> <Grid RenderOptions.ClearTypeHint="Enabled"> <Canvas Height="0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="0"> <Rectangle Fill="{Binding Path=Background, ElementName=DropDownBorder}" Height="{Binding Path=ActualHeight, ElementName=DropDownBorder}" Name="OpaqueRect" Width="{Binding Path=ActualWidth, ElementName=DropDownBorder}" /> </Canvas> <ItemsPresenter KeyboardNavigation.DirectionalNavigation="Contained" Name="ItemsPresenter" SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" /> </Grid> </ScrollViewer> </Border> </my:SystemDropShadowChrome> </Popup> <ToggleButton Background="{TemplateBinding Control.Background}" BorderBrush="{TemplateBinding Control.BorderBrush}" Grid.ColumnSpan="2" IsChecked="{Binding Path=IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"> <ToggleButton.Style> <Style TargetType="ToggleButton"> <Setter Property="FrameworkElement.OverridesDefaultStyle" Value="True" /> <Setter Property="Control.IsTabStop" Value="False" /> <Setter Property="UIElement.Focusable" Value="False" /> <Setter Property="ButtonBase.ClickMode" Value="Press" /> <Setter Property="Control.Template"> <Setter.Value> <ControlTemplate TargetType="ToggleButton"> <my:ButtonChrome Background="{TemplateBinding Control.Background}" BorderBrush="{TemplateBinding Control.BorderBrush}" Name="Chrome" SnapsToDevicePixels="True"> <Grid HorizontalAlignment="Right" Width="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}"> <Path Data="M0,0L3.5,4 7,0z" Fill="Yellow" HorizontalAlignment="Center" Margin="3,1,0,0" Name="Arrow" VerticalAlignment="Center" /> </Grid> </my:ButtonChrome> <ControlTemplate.Triggers> <Trigger Property="ToggleButton.IsChecked" Value="True"> <Setter Property="my:ButtonChrome.RenderPressed" TargetName="Chrome" Value="True" /> </Trigger> <Trigger Property="UIElement.IsEnabled" Value="False"> <Setter Property="Shape.Fill" TargetName="Arrow" Value="#FFAFAFAF" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> </ToggleButton.Style> </ToggleButton> <ContentPresenter Content="{TemplateBinding ComboBox.SelectionBoxItem}" ContentStringFormat="{TemplateBinding ComboBox.SelectionBoxItemStringFormat}" ContentTemplate="{TemplateBinding ComboBox.SelectionBoxItemTemplate}" HorizontalAlignment="{TemplateBinding Control.HorizontalContentAlignment}" IsHitTestVisible="False" Margin="{TemplateBinding Control.Padding}" SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding Control.VerticalContentAlignment}" /> </Grid> <ControlTemplate.Triggers> <Trigger Property="Popup.HasDropShadow" SourceName="PART_Popup" Value="True"> <Setter Property="FrameworkElement.Margin" TargetName="Shdw" Value="0,0,5,5" /> <Setter Property="my:SystemDropShadowChrome.Color" TargetName="Shdw" Value="#71000000" /> </Trigger> <Trigger Property="ItemsControl.HasItems" Value="False"> <Setter Property="FrameworkElement.Height" TargetName="DropDownBorder" Value="95" /> </Trigger> <Trigger Property="UIElement.IsEnabled" Value="False"> <Setter Property="Control.Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" /> <Setter Property="Control.Background" Value="#FFF4F4F4" /> </Trigger> <Trigger Property="ItemsControl.IsGrouping" Value="True"> <Setter Property="ScrollViewer.CanContentScroll" Value="False" /> </Trigger> <Trigger Property="ScrollViewer.CanContentScroll" SourceName="DropDownScrollViewer" Value="False"> <Setter Property="Canvas.Top" TargetName="OpaqueRect" Value="{Binding Path=VerticalOffset, ElementName=DropDownScrollViewer}" /> <Setter Property="Canvas.Left" TargetName="OpaqueRect" Value="{Binding Path=HorizontalOffset, ElementName=DropDownScrollViewer}" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Window.Resources> <Grid> <ComboBox Background="Black" HorizontalAlignment="Center" VerticalAlignment="Center" Width="200" Template="{StaticResource Template1}" > <ComboBoxItem>Item 1</ComboBoxItem> </ComboBox> </Grid>
Sincerely,
Bob Bao [MSFT]
MSDN Community Support | Feedback to us
- 已编辑 Jie BaoModerator 2012年2月21日 2:33
- 已标记为答案 Jie BaoModerator 2012年2月28日 3:54