我正在关注本教程,了解如何在 WPF 应用程序中以动画的形式包含像素着色器效果。
背景
我觉得事情进展顺利,但是我想对应用程序进行更改。在本教程中,作者有一个单独的 GrayscaleEffect 项目,并在他的 XAML 中执行以下操作:
xmlns:effect="clr-namespace:GrayscaleEffect;assembly=GrayscaleEffect"
后来他有这个:
DataTemplate x:Key="itemTemplate">
<Grid Width="225" Margin="3">
<Border BorderBrush="White" BorderThickness="2">
<Image Source="{Binding}" HorizontalAlignment="Center" VerticalAlignment="Center">
<Image.Effect>
<local:GrayscaleEffectTest x:Name="grayscaleEffect"/>
</Image.Effect>
<Image.Triggers>
<EventTrigger RoutedEvent="Mouse.MouseEnter">
<BeginStoryboard>
<Storyboard>
<!--HERE--> <DoubleAnimation To="1.0" Duration="0:0:0.3" AccelerationRatio="0.10" DecelerationRatio="0.25" Storyboard.TargetName="grayscaleEffect" Storyboard.TargetProperty="(local:GrayscaleEffectTest.DesaturationFactor)" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="Mouse.MouseLeave">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation To="0.0" Duration="0:0:4" AccelerationRatio="0.10" DecelerationRatio="0.25" Storyboard.TargetName="grayscaleEffect" Storyboard.TargetProperty="(local:GrayscaleEffectTest.DesaturationFactor)" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Image.Triggers>
</Image>
</Border>
</Grid>
</DataTemplate>
这里的关键点是很长的一行 <DoubleAnimation ....
:
Storyboard.TargetProperty="(effect:GrayscaleEffect.DesaturationFactor)" />
我的方法
我想做同样的事情,除了我想把我所有的代码都放在同一个项目中,而不是有两个项目。
所以,我不包括;assembly=GrayscaleEffect
. 此外,我的<DoubleAnimation ...
行内容如下:
<DoubleAnimation ... Storyboard.TargetName="grayscaleEffect" Storyboard.TargetProperty="(local:GrayscaleEffectTest.DesaturationFactor)" />
但是 WPF 设计器会引发初始化程序异常。程序运行,但当我将鼠标悬停时,没有任何动画被触发......
有人有想法么?我相信 WPF 应该能够在同一个项目中运行像素着色器......我的项目有预构建事件,除了重命名为 GrayscaleEffect Test并将两个项目合并为一个之外,我的项目应该是相同的到教程。我尝试了许多其他失败方法,主要是设置Storyboard.TargetProeprty = every damn thing under the sun
. 还试图拼凑一些东西来在后面的代码中设置动画,希望我至少可以用一个调试器完成并尝试看看发生了什么。显然,没有任何效果:(。
任何帮助将不胜感激。干杯。