我看到Button对象有一个IsMouseOVer属性。
但是如何在网格或其他网格上创建鼠标效果 没有IsMouseOver的元素??
由于 马尔科姆
编辑:我想通了。我使用了错误的方法来设置触发器。
答案 0 :(得分:34)
我意识到我正在响应一个死线程但是因为我遇到了它,并且由于线程没有得到解答,我将回答它。
WPF Grid具有“IsMouseOver”属性。
我认为这个问题是被问到的,因为“IsMouseOver”属性只有在鼠标位于Grid本身的某个控件(即Button或ComboBox)之后才会改变。
因此,可能看起来“IsMouseOver”属性不起作用(特别是如果您在触发器中使用设置Grid的Visible属性)。
例如:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="25" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Button Grid.Column="1">A Button</Button>
<Grid.Style>
<Style TargetType="{x:Type Grid}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="False">
<Setter Property="Opacity" Value="0.5"></Setter>
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Opacity" Value="1"></Setter>
</Trigger>
</Style.Triggers>
</Style>
</Grid.Style>
</Grid>
上面的Grid及其内容将以半透明度显示。 您会注意到,如果将鼠标悬停在第一列(不包含任何内容)上,则不透明度将不设置为完整;但是,如果将鼠标悬停在第二列中的按钮上,则不透明度将设置为完整。这是因为没有任何内容的第一列不是可以测试的;然而,第二列中的按钮是可命中测试的,因此触发事件。
如果希望Grid的IsMouseOver属性检测鼠标何时位于Grid本身的任何位置,您所要做的就是将Grid的Background属性设置为非Null(例如将其设置为Transparent)。设置Background属性将使Grid“可以测试”。
以下代码将解决问题:
<Grid Background="Transparent">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="25" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Button Grid.Column="1">A Button</Button>
<Grid.Style>
<Style TargetType="{x:Type Grid}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="False">
<Setter Property="Opacity" Value="0"></Setter>
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Opacity" Value="1"></Setter>
</Trigger>
</Style.Triggers>
</Style>
</Grid.Style>
</Grid>
-Frinny
答案 1 :(得分:2)
一个人也可以这样使用MouseEnter
/ MouseLeave
事件:
<Grid Name="grid">
<Grid.Triggers>
<EventTrigger RoutedEvent="MouseEnter">
<BeginStoryboard>
<Storyboard>
<ThicknessAnimation Storyboard.TargetProperty="Margin" From="0,0,-300,0" To="0,0,0,0" DecelerationRatio=".9" Duration="0:0:1" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="MouseLeave">
<BeginStoryboard>
<Storyboard>
<ThicknessAnimation Storyboard.TargetProperty="Margin" From="0,0,0,0" To="0,0,-300,0" AccelerationRatio=".9" Duration="0:0:1" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Grid.Triggers>
</Grid>
答案 2 :(得分:0)
这将是WPF对象上的“MouseEnter”和“MouseLeave”操作。