2014-06-07 76 views
0

我想检查wpf控件上的MouseOver效果。在我的代码中,它只能在文本块上工作,而不能在其他文件上工作。代码是正确的,没有错误产生。我在哪里可以获得触发器的属性值?鼠标悬停效果只能在WPF中的TextBlock上工作

<Window x:Class="RoutedEventPr.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 

<Grid Width="200" Height="100" Background="AliceBlue" > 
    <Grid.Style> 
     <Style TargetType="{x:Type Grid}"> 
      <Style.Triggers> 
       <Trigger Property="IsMouseOver" Value="True"> 
        <Setter Property="Background" Value="Red"/> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </Grid.Style> 
    <Ellipse Fill="#FF3AB0B0" StrokeThickness="4" Width="200" Height="100"> 
     <Ellipse.Effect> 
      <DropShadowEffect/> 
     </Ellipse.Effect> 
     <Ellipse.Style> 
      <Style TargetType="{x:Type Ellipse}"> 
       <Style.Triggers> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="Fill" Value="Red"/> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </Ellipse.Style> 
    </Ellipse> 
    <TextBlock Text="Press" HorizontalAlignment="Center" VerticalAlignment="Center"> 
     <TextBlock.Style> 
      <Style TargetType="{x:Type TextBlock}"> 
       <Style.Triggers> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="Background" Value="Red"/> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </TextBlock.Style> 
    </TextBlock> 
</Grid> 

+0

尝试使用eventrigger isntead。 – chfumero

+0

问题在于那个控件定义了他自己的onMouseOver风格 – chfumero

回答

1

因为TextBlock在这里,你有BackgroundGridFillEllipse你不用手动设置的初始值的唯一控制。如果你想Trigger能够覆盖你需要把它纳入StyleSetter

<Grid Width="200" Height="100" > 
    <Grid.Style> 
     <Style TargetType="{x:Type Grid}"> 
      <Setter Property="Background" Value="AliceBlue"/> 
      <Style.Triggers> 
       <Trigger Property="IsMouseOver" Value="True"> 
        <Setter Property="Background" Value="Red"/> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </Grid.Style> 
    <Ellipse StrokeThickness="4" Width="200" Height="100"> 
     <Ellipse.Effect> 
      <DropShadowEffect/> 
     </Ellipse.Effect> 
     <Ellipse.Style> 
      <Style TargetType="{x:Type Ellipse}"> 
       <Setter Property="Fill" Value="#FF3AB0B0"/> 
       <Style.Triggers> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="Fill" Value="Red"/> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </Ellipse.Style> 
    </Ellipse> 
    <TextBlock Text="Press" HorizontalAlignment="Center" VerticalAlignment="Center"> 
     <TextBlock.Style> 
      <Style TargetType="{x:Type TextBlock}"> 
       <Style.Triggers> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="Background" Value="Red"/> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </TextBlock.Style> 
    </TextBlock> 
</Grid> 

DependencyProperty默认值如下源层次和手动价值超过Style优先。您可以阅读更多Dependency Property Setting Precedence List

+0

完美!但是,这是学习WPF的方式吗?为什么事情不像一般的开发者那样工作会期望他们是? – AnjumSKhan

+0

'DependencyProperty'在WPF中非常重要,因为它可以让你绑定它,它不仅存储值,而且还存储源,以避免当前值混乱,因为它可以通过很多东西设置,如'Style','Style.Triggers' ,'Template.Triggers',动画。例如,如果在动画中'触发器'可以改变值,或者'Style'和'Template'触发了哪个值, – dkozl

+0

+1为您的答案。将继续为你解答我的疑惑。 – AnjumSKhan