我是初学者并试图了解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>
答案 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的一个错误。