2012-05-01 167 views
2

我有网的WPF。当我在矩形上进行鼠标悬停时,我可以看到颜色变化。但是当我在内容上进行鼠标悬停时,我会看到矩形的原始颜色。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> 

感谢 迪

回答

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> 
+0

这是真的真棒,它为我工作很多试验和错误之后。在网格内有矩形时设置控件模板。 –

2

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