2011-04-06 118 views
3

我有一个包含一个ComboBox如何在鼠标悬停上设置组合框背景?

<Border CornerRadius="10" BorderBrush...> 
    <ComboBox Background="{x:Null}"> 
     <ComboBoxItem ...> 
     <ComboBoxItem ...> 
    </ComboBox> 
</Border> 

当我的鼠标没有悬停在组合框的顶部的圆角边框,美观且透明。就像这样:

enter image description here

当鼠标上徘徊,它就产生老,钮扣状,背景,像这样:

enter image description here

我想组合框有即使鼠标在顶部,也具有透明背景。我尝试了各种方法,包括编写MouseEnter,MouseLeave,MouseMove将背景设置为null,但没有成功。

private void ComboBox_MouseEnter(object sender, RoutedEventArgs e) 
{ 
    comboBox1.Background = null; 
} 

我再试着设置了造型:

<Window.Resources> 
    <Style TargetType="{x:Type ComboBox}" x:Key="HoverBox"> 
     <Style.Triggers> 
      <Trigger Property="IsMouseOver" Value="True"> 
       <Setter Property="Background" Value="Pink" /> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
</Window.Resources> 

这也不能工作。然后我试图修改控件模板:

<ControlTemplate TargetType="{x:Type ComboBox}" x:Key="MouseHover"> 
    <ControlTemplate.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="Background" Value="Red" /> 
      <Setter Property="Foreground" Value="Green" /> 
     </Trigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 

最差的,之后我修改控制模板组合框消失,就像如下:

enter image description here

我所做的一切都是可能的,但我仍然得到当我的鼠标悬停在它上面时,在我的ComboBox上出现难看的按钮背景。

任何人都知道这里出了什么问题?

+1

请不要问重复的问题 http://stackoverflow.com/q/5563536/217880, http://stackoverflow.com/q/5562967/217880 – biju 2011-04-06 09:23:39

回答

2

检查以前的帖子在问同一个

Unable to style WPF ComboBox on Mouse Hover

How to change ComboBox's Background Property during Mouse Hover

编辑

这样使用。以下是组合框的默认控制模板。注意代码的注释行按您的需求

<Window.Resources> 
     <!-- Fill Brushes --> 

     <LinearGradientBrush x:Key="NormalBrush" StartPoint="0,0" EndPoint="0,1"> 
      <GradientBrush.GradientStops> 
       <GradientStopCollection> 
        <GradientStop Color="#FFF" Offset="0.0"/> 
        <GradientStop Color="#CCC" Offset="1.0"/> 
       </GradientStopCollection> 
      </GradientBrush.GradientStops> 
     </LinearGradientBrush> 

     <LinearGradientBrush x:Key="HorizontalNormalBrush" StartPoint="0,0" EndPoint="1,0"> 
      <GradientBrush.GradientStops> 
       <GradientStopCollection> 
        <GradientStop Color="#FFF" Offset="0.0"/> 
        <GradientStop Color="#CCC" Offset="1.0"/> 
       </GradientStopCollection> 
      </GradientBrush.GradientStops> 
     </LinearGradientBrush> 

     <LinearGradientBrush x:Key="LightBrush" StartPoint="0,0" EndPoint="0,1"> 
      <GradientBrush.GradientStops> 
       <GradientStopCollection> 
        <GradientStop Color="#FFF" Offset="0.0"/> 
        <GradientStop Color="#EEE" Offset="1.0"/> 
       </GradientStopCollection> 
      </GradientBrush.GradientStops> 
     </LinearGradientBrush> 

     <LinearGradientBrush x:Key="HorizontalLightBrush" StartPoint="0,0" EndPoint="1,0"> 
      <GradientBrush.GradientStops> 
       <GradientStopCollection> 
        <GradientStop Color="#FFF" Offset="0.0"/> 
        <GradientStop Color="#EEE" Offset="1.0"/> 
       </GradientStopCollection> 
      </GradientBrush.GradientStops> 
     </LinearGradientBrush> 

     <LinearGradientBrush x:Key="DarkBrush" StartPoint="0,0" EndPoint="0,1"> 
      <GradientBrush.GradientStops> 
       <GradientStopCollection> 
        <GradientStop Color="#FFF" Offset="0.0"/> 
        <GradientStop Color="#AAA" Offset="1.0"/> 
       </GradientStopCollection> 
      </GradientBrush.GradientStops> 
     </LinearGradientBrush> 

     <LinearGradientBrush x:Key="PressedBrush" StartPoint="0,0" EndPoint="0,1"> 
      <GradientBrush.GradientStops> 
       <GradientStopCollection> 
        <GradientStop Color="#BBB" Offset="0.0"/> 
        <GradientStop Color="#EEE" Offset="0.1"/> 
        <GradientStop Color="#EEE" Offset="0.9"/> 
        <GradientStop Color="#FFF" Offset="1.0"/> 
       </GradientStopCollection> 
      </GradientBrush.GradientStops> 
     </LinearGradientBrush> 

     <SolidColorBrush x:Key="DisabledForegroundBrush" Color="#888" /> 

     <SolidColorBrush x:Key="DisabledBackgroundBrush" Color="#EEE" /> 

     <SolidColorBrush x:Key="WindowBackgroundBrush" Color="#FFF" /> 

     <SolidColorBrush x:Key="SelectedBackgroundBrush" Color="#DDD" /> 

     <!-- Border Brushes --> 

     <LinearGradientBrush x:Key="NormalBorderBrush" StartPoint="0,0" EndPoint="0,1"> 
      <GradientBrush.GradientStops> 
       <GradientStopCollection> 
        <GradientStop Color="#CCC" Offset="0.0"/> 
        <GradientStop Color="#444" Offset="1.0"/> 
       </GradientStopCollection> 
      </GradientBrush.GradientStops> 
     </LinearGradientBrush> 

     <LinearGradientBrush x:Key="HorizontalNormalBorderBrush" StartPoint="0,0" EndPoint="1,0"> 
      <GradientBrush.GradientStops> 
       <GradientStopCollection> 
        <GradientStop Color="#CCC" Offset="0.0"/> 
        <GradientStop Color="#444" Offset="1.0"/> 
       </GradientStopCollection> 
      </GradientBrush.GradientStops> 
     </LinearGradientBrush> 

     <LinearGradientBrush x:Key="DefaultedBorderBrush" StartPoint="0,0" EndPoint="0,1"> 
      <GradientBrush.GradientStops> 
       <GradientStopCollection> 
        <GradientStop Color="#777" Offset="0.0"/> 
        <GradientStop Color="#000" Offset="1.0"/> 
       </GradientStopCollection> 
      </GradientBrush.GradientStops> 
     </LinearGradientBrush> 

     <LinearGradientBrush x:Key="PressedBorderBrush" StartPoint="0,0" EndPoint="0,1"> 
      <GradientBrush.GradientStops> 
       <GradientStopCollection> 
        <GradientStop Color="#444" Offset="0.0"/> 
        <GradientStop Color="#888" Offset="1.0"/> 
       </GradientStopCollection> 
      </GradientBrush.GradientStops> 
     </LinearGradientBrush> 

     <SolidColorBrush x:Key="DisabledBorderBrush" Color="#AAA" /> 

     <SolidColorBrush x:Key="SolidBorderBrush" Color="#888" /> 

     <SolidColorBrush x:Key="LightBorderBrush" Color="#AAA" /> 

     <!-- Miscellaneous Brushes --> 
     <SolidColorBrush x:Key="GlyphBrush" Color="#444" /> 

     <SolidColorBrush x:Key="LightColorBrush" Color="#DDD" /> 

     <ControlTemplate x:Key="ComboBoxToggleButton" TargetType="ToggleButton"> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition /> 
        <ColumnDefinition Width="20" /> 
       </Grid.ColumnDefinitions> 
       <Border 
     x:Name="Border" 
     Grid.ColumnSpan="2" 
     CornerRadius="2" 
     Background="{StaticResource NormalBrush}" 
     BorderBrush="{StaticResource NormalBorderBrush}" 
     BorderThickness="1" /> 
       <Border 
     Grid.Column="0" 
     CornerRadius="2,0,0,2" 
     Margin="1" 
     Background="{StaticResource WindowBackgroundBrush}" 
     BorderBrush="{StaticResource NormalBorderBrush}" 
     BorderThickness="0,0,1,0" /> 
       <Path 
     x:Name="Arrow" 
     Grid.Column="1"  
     Fill="{StaticResource GlyphBrush}" 
     HorizontalAlignment="Center" 
     VerticalAlignment="Center" 
     Data="M 0 0 L 4 4 L 8 0 Z"/> 
      </Grid> 
      <ControlTemplate.Triggers> 
       <!--<Trigger Property="ToggleButton.IsMouseOver" Value="true"> 
        <Setter TargetName="Border" Property="Background" Value="{StaticResource DarkBrush}" /> 
       </Trigger>--> 
       <Trigger Property="ToggleButton.IsChecked" Value="true"> 
        <Setter TargetName="Border" Property="Background" Value="{StaticResource PressedBrush}" /> 
       </Trigger> 
       <Trigger Property="IsEnabled" Value="False"> 
        <Setter TargetName="Border" Property="Background" Value="{StaticResource DisabledBackgroundBrush}" /> 
        <Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource DisabledBorderBrush}" /> 
        <Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}"/> 
        <Setter TargetName="Arrow" Property="Fill" Value="{StaticResource DisabledForegroundBrush}" /> 
       </Trigger> 
      </ControlTemplate.Triggers> 
     </ControlTemplate> 

     <ControlTemplate x:Key="ComboBoxTextBox" TargetType="TextBox"> 
      <Border x:Name="PART_ContentHost" Focusable="False" Background="{TemplateBinding Background}" /> 
     </ControlTemplate> 

     <Style x:Key="{x:Type ComboBox}" TargetType="ComboBox"> 
      <Setter Property="SnapsToDevicePixels" Value="true"/> 
      <Setter Property="OverridesDefaultStyle" Value="true"/> 
      <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/> 
      <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/> 
      <Setter Property="ScrollViewer.CanContentScroll" Value="true"/> 
      <Setter Property="MinWidth" Value="120"/> 
      <Setter Property="MinHeight" Value="20"/> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="ComboBox"> 
         <Grid> 
          <ToggleButton 
      Name="ToggleButton" 
      Template="{StaticResource ComboBoxToggleButton}" 
      Grid.Column="2" 
      Focusable="false" 
      IsChecked="{Binding Path=IsDropDownOpen,Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent}}" 
      ClickMode="Press"> 
          </ToggleButton> 
          <ContentPresenter 
      Name="ContentSite" 
      IsHitTestVisible="False" 
      Content="{TemplateBinding SelectionBoxItem}" 
      ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" 
      ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}" 
      Margin="3,3,23,3" 
      VerticalAlignment="Center" 
      HorizontalAlignment="Left" /> 
          <TextBox x:Name="PART_EditableTextBox" 
      Style="{x:Null}" 
      Template="{StaticResource ComboBoxTextBox}" 
      HorizontalAlignment="Left" 
      VerticalAlignment="Center" 
      Margin="3,3,23,3" 
      Focusable="True" 
      Background="Transparent" 
      Visibility="Hidden" 
      IsReadOnly="{TemplateBinding IsReadOnly}"/> 
          <Popup 
      Name="Popup" 
      Placement="Bottom" 
      IsOpen="{TemplateBinding IsDropDownOpen}" 
      AllowsTransparency="True" 
      Focusable="False" 
      PopupAnimation="Slide"> 
           <Grid 
       Name="DropDown" 
       SnapsToDevicePixels="True"     
       MinWidth="{TemplateBinding ActualWidth}" 
       MaxHeight="{TemplateBinding MaxDropDownHeight}"> 
            <Border 
       x:Name="DropDownBorder" 
       Background="{StaticResource WindowBackgroundBrush}" 
       BorderThickness="1" 
       BorderBrush="{StaticResource SolidBorderBrush}"/> 
            <ScrollViewer Margin="4,6,4,6" SnapsToDevicePixels="True"> 
             <StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained" /> 
            </ScrollViewer> 
           </Grid> 
          </Popup> 
         </Grid> 
         <ControlTemplate.Triggers> 
          <Trigger Property="HasItems" Value="false"> 
           <Setter TargetName="DropDownBorder" Property="MinHeight" Value="95"/> 
          </Trigger> 
          <Trigger Property="IsEnabled" Value="false"> 
           <Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}"/> 
          </Trigger> 
          <Trigger Property="IsGrouping" Value="true"> 
           <Setter Property="ScrollViewer.CanContentScroll" Value="false"/> 
          </Trigger> 
          <Trigger SourceName="Popup" Property="Popup.AllowsTransparency" Value="true"> 
           <Setter TargetName="DropDownBorder" Property="CornerRadius" Value="4"/> 
           <Setter TargetName="DropDownBorder" Property="Margin" Value="0,2,0,0"/> 
          </Trigger> 
          <Trigger Property="IsEditable" 
       Value="true"> 
           <Setter Property="IsTabStop" Value="false"/> 
           <Setter TargetName="PART_EditableTextBox" Property="Visibility" Value="Visible"/> 
           <Setter TargetName="ContentSite" Property="Visibility" Value="Hidden"/> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
      <Style.Triggers> 
      </Style.Triggers> 
     </Style> 

    </Window.Resources> 
+0

我试图结合我得到的答案并重新说明我的问题。我已经尝试过你的链接 - 第一个链接:只要向样式添加“覆盖”,整个组合框消失。第二个环节:不 - 我很抱歉,但它不可读/可理解。但感谢指点。一票, – KMC 2011-04-06 09:36:39

+0

根据你的链接,我修改了控件模板但是仍然没有解决问题 – KMC 2011-04-06 10:03:44

+0

@KMC看看更新回答 – biju 2011-04-06 10:26:35

相关问题