IsMouseOver仅暂时触发背景颜色更改

时间:2012-12-13 14:33:34

标签: wpf xaml triggers

我是初学者并试图了解WPF和XAML的工作原理。 Nathans Unleashed 4.0书中的以下片段是(一个微不足道的修改)。我把它插入一个Ok按钮:

<Button.Style>
 <Style TargetType=”{x:Type Button}”>
  <Style.Triggers>
   <Trigger Property=”IsMouseOver” Value=”True”>
    <Setter Property=”Background” Value=”Yellow”/>
   </Trigger>
  </Style.Triggers>
 </Style>
</Button.Style>

当我在XAML crunsher中运行它并将鼠标移到Ok按钮上时,按钮确实将其背景颜色更改为黄色(精细),但即使鼠标停留在按钮上,也会立即将颜色重置为原始值 - 为什么是这样?我希望它能保持黄色,直到鼠标离开按钮。这是XAML crunsher的问题,还是我的期望错了?

编辑(回复评论):这是完整的窗口,也取自Nathan的书:

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="About WPF Unleashed" SizeToContent="WidthAndHeight"
    Background="OrangeRed">
  <StackPanel>
   <Label FontWeight="Bold" FontSize="20" Foreground="White">
    WPF Unleashed (Version 3.0)
   </Label>
   <Label>© 2006 SAMS Publishing</Label>
   <Label>Installed Chapters:</Label>
   <ListBox>
    <ListBoxItem>Chapter 1</ListBoxItem>
    <ListBoxItem>Chapter 2</ListBoxItem>
   </ListBox>
   <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
   <Button MinWidth="75" Margin="10">Help</Button>
   <Button MinWidth="75" Margin="10">
    <Button.Style>
     <Style TargetType="{x:Type Button}">
      <Style.Triggers>
       <Trigger Property="IsMouseOver" Value="True">
        <Setter Property="Background" Value="Yellow"/>
       </Trigger>
      </Style.Triggers>
     </Style>
     </Button.Style>
     OK
     </Button>
    </StackPanel>
   <StatusBar>You have successfully registered this product.</StatusBar>
  </StackPanel>
</Window>

2 个答案:

答案 0 :(得分:1)

不幸的是,幻灯片上的花式悬停是内置于Button的,你必须覆盖ControlTemplate才能阻止它发生。

 <Button MinWidth="75" Margin="10" FocusVisualStyle="{x:Null}" Content="OK">
            <Button.Style>
                <Style TargetType="{x:Type Button}">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type Button}">
                                <Border Name="border" BorderThickness="1" Padding="4,2" BorderBrush="DarkGray" CornerRadius="3" Background="{TemplateBinding Background}">
                                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Name="content"/>
                                </Border>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                    <Style.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Background" Value="Yellow"/>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </Button.Style>
        </Button>

答案 1 :(得分:0)

我将您的代码复制到一个新的Visual Studio 2010项目中并成功运行它(.NET 4.0)。

我认为这个问题是XAML Cruncher的一个错误。