【发布时间】:2012-03-11 02:33:36
【问题描述】:
我正在做一个按预期工作的简单动画,直到我在我的网格周围放置一个边框。一旦我这样做,当我鼠标单击框架时动画就会闪烁。我正在尝试实现一个“滑入”视图的菜单。我在下面包含了我的代码。这几乎就像我的鼠标单击导致了无限的动画循环。
<Border BorderBrush="YellowGreen" CornerRadius="8" BorderThickness="10" Background="Black">
<Grid MouseLeftButtonDown="DragWindow">
<Grid.Resources>
<Style TargetType="Frame" x:Key="GrowingFrameStyle">
<Setter Property="Foreground" Value="#505050"/>
<Setter Property="Background" Value="Black" />
<Setter Property="Height" Value="20" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation Duration="0:0:0.5" Storyboard.TargetProperty="Foreground.Color" To="LightGray" />
<ColorAnimation Duration="0:0:0.5" Storyboard.TargetProperty="Background.Color" To="SteelBlue" />
<DoubleAnimation Storyboard.TargetProperty="Height" From="20" To="50" Duration="0:0:.3" />
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation Duration="0:0:0.5" Storyboard.TargetProperty="Foreground.Color" To="#505050" />
<ColorAnimation Duration="0:0:0.5" Storyboard.TargetProperty="Background.Color" To="Black" />
<DoubleAnimation Storyboard.TargetProperty="Height" From="50" To="20" Duration="0:0:.3" />
</Storyboard>
</BeginStoryboard>
</Trigger.ExitActions>
</Trigger>
</Style.Triggers>
</Style>
</Grid.Resources>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="50"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="20"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Label Grid.Row="1" Grid.ColumnSpan="2" Background="Black"/>
<Frame Grid.RowSpan="2" Grid.ColumnSpan="2" Background="SlateBlue" VerticalAlignment="Top" Style="{StaticResource GrowingFrameStyle}"/>
</Grid>
</Border>
后面代码中的唯一方法
private void DragWindow(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
DragMove();
}
【问题讨论】:
-
我们可能需要看看 DragWindow 方法
-
我重现了这个问题。单击是 IsMouseOver 重新开始,但不是没有边框。我不知道为什么。如果您单击前 20 个,情节提要仅运行一次。如果你点击底部的 20-50,你会得到一个循环。我不知道答案,这就是我发表评论的原因。
-
我认为答案是事件冒泡的某个地方。如果您在 Border 上设置 IsHitVisable=false,则不会发生任何事情。我不知道答案,但它表明边界在偶数序列中。
标签: c# wpf xaml animation styles