1

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

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

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

编辑(回复评论):这是完整的窗口,也来自 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>
4

2 回答 2

3

不幸的是,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>
于 2012-12-13T21:05:09.360 回答
0

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

我相信问题是 XAML Cruncher 的错误。

于 2012-12-13T16:25:13.327 回答