wpf mouseover填充矩形

时间:2012-05-01 02:33:26

标签: wpf mouseover

我在wpf中有网格。当我在矩形上进行鼠标悬停时,我可以看到颜色变化。但是当我对内容进行鼠标悬停时,我会看到矩形的原始颜色。

我应该写什么来在ContentPresenter上应用相同的鼠标悬停效果,或者是否有任何方法可以在内容呈现器的鼠标上更改矩形背景颜色。

<Grid Background="{TemplateBinding Background}" x:Name="dgColumnHeader">
         <Border x:Name="border" BorderBrush="Black" BorderThickness="0,0,1,1" Grid.ColumnSpan="1">
                <Rectangle Width="116" Margin="3,3,3,3" HorizontalAlignment="Center" RadiusX="7" RadiusY="7">
                    <Rectangle.Style>
                        <Style TargetType="{x:Type Rectangle}">
                            <Setter Property="Fill" Value="{DynamicResource ContentOutofFocusBrush}"></Setter>
                            <Style.Triggers>
                                <Trigger Property="IsMouseOver" Value="True">
                                    <Setter Property="Fill" Value="{DynamicResource ActiveItemBrush}" />
                                </Trigger>
                            </Style.Triggers>
                        </Style>
                    </Rectangle.Style>
                </Rectangle>
            </Border>
            <ContentPresenter x:Name="content"  HorizontalAlignment="Center"  VerticalAlignment="Center" Content="{TemplateBinding Content}" />
        </Grid>

由于 DEE

2 个答案:

答案 0 :(得分:3)

如果网格是控件模板的一部分,那么最好将矩形样式触发器移动到ControlTemplate.Triggers中:

<Window x:Class="Presentation2.MouseOverRectangleWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MouseOverRectangleWindow" Height="300" Width="300">
  <Window.Resources>
    <SolidColorBrush x:Key="ContentOutofFocusBrush" Color="Orange"/>

    <SolidColorBrush x:Key="ActiveItemBrush" Color="Blue" />

    <Style x:Key="MouseOverContentControlStyle" TargetType="{x:Type ContentControl}">
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="ContentControl">
            <Grid Background="{TemplateBinding Background}" x:Name="dgColumnHeader">
              <Border x:Name="border" BorderBrush="Black" BorderThickness="0,0,1,1" Grid.ColumnSpan="1">
                <Rectangle x:Name="PART_Rectangle" Width="116" Margin="3,3,3,3" HorizontalAlignment="Center" RadiusX="7" RadiusY="7">
                  <Rectangle.Style>
                    <Style TargetType="{x:Type Rectangle}">
                      <Setter Property="Fill" Value="{DynamicResource ContentOutofFocusBrush}"></Setter>
                    </Style>
                  </Rectangle.Style>
               </Rectangle>
              </Border>
             <ContentPresenter x:Name="content" HorizontalAlignment="Center"  VerticalAlignment="Center" Content="{TemplateBinding Content}" />
           </Grid>
           <ControlTemplate.Triggers>
             <Trigger Property="IsMouseOver" Value="True">
               <Setter TargetName="PART_Rectangle" Property="Fill" Value="{DynamicResource ActiveItemBrush}" />
             </Trigger>
           </ControlTemplate.Triggers>
         </ControlTemplate>
      </Setter.Value>
  </Setter>
</Style>
</Window.Resources>
   <Grid>
     <ContentControl Style="{StaticResource MouseOverContentControlStyle}">
       <TextBlock Text="Hello World!" />
     </ContentControl>
   </Grid>
</Window>

答案 1 :(得分:2)

你的边框里面不需要一个矩形。更改边框的背景,你会得到相同的结果。然后将ContentPresenter放在Border中,并在Border上设置MouseOver处理程序,它应该可以正常工作。