2

所以我有一个视图模型绑定到具有一些属性(名称、大小等)的自定义对象的集合,这些属性实现了 NotifyPropertyChanged,因此 LongListSelector 相应地更新。

现在我想向 LongListSelector 添加一些动画,当它被添加时它会淡入一个项目,当它被删除时它会淡出一个项目。当 Grid.Loaded 触发时,我已经设法让添加动画工作,所以我想我也可以在 Grid.Unload 上调用反向动画(淡出),但我没有成功。

我看过:Grid.Unload(由于某种原因从不触发),Grid.LayoutUpdated(触发太多次),Triggers PropertyChangedTrigger(我想如果我将它绑定到像“Remove”这样的属性,那么我可以为它制作动画当该属性设置为true,但坚持如何实现这一点。但是,这似乎是我现阶段最好的选择),Styles EventTrigger(但没有事件是我想要的。也许我可以创建一个新事件对于 LongListSelector,但这将需要更多时间来创建从它继承的控件)。

所以我想知道我还有哪些其他选择?或者,如果有人遇到过类似情况,可以分享一些知识!

编辑 - 这是一个 Windows Phone 应用程序,所以有些课程对我不可用。
编辑 2 - 只是为了澄清,我可以为网格制作故事板并降低不透明度,但我的代码的方式是处理删除无法定位网格以开始该故事板的项目。我之前也被困在这个问题上,但决定改变我的实现以解决另一个问题。就目前而言,我的 LongListSelector 的 ItemTemplate 绑定到一个 PhoneApplicationResource(相当于一个资源)DataTemplate,我没有运气在这个模板中找到网格。
编辑 3 - 刚刚尝试过 DataTriggers,似乎进展顺利:

           <Custom:Interaction.Triggers>
                <ic:DataTrigger Binding="{Binding IsDeleted}" Value="true">
                    <eim:ControlStoryboardAction Storyboard="{StaticResource fade}"/>
                </ic:DataTrigger>
            </Custom:Interaction.Triggers>

IsDeleted 正在工作,因为我在另一个绑定中对其进行了测试以查看其值,但是当我运行上述代码时,我得到了 debug.break() 错误。它仅在我运行上述代码时出现。这是我的故事板供参考:

                <Storyboard x:Name="fade">
                    <DoubleAnimation Storyboard.TargetName="grid" Storyboard.TargetProperty="Height" From="95" To="0" Duration="0:0:1" SpeedRatio="1" />
                    <DoubleAnimation Storyboard.TargetName="grid" Storyboard.TargetProperty="Opacity" From="1.0" To="0" Duration="0:0:1" SpeedRatio="1" />
                </Storyboard>

注意:两者都位于 PhoneApplicationPage.Resources 网格中的 DataTemplate 中,只有情节提要位于 Grid.Resources 中,如下所示:

<PhoneApplicationPage.Resources>
     <DataTemplate>
          <Grid>
               //DataTrigger here

               <Grid.Resources>
                  // Storyboard here
               </Grid.Resources>
          </Grid>
     </DataTemplate>
</PhoneApplicationPage.Resources>

谢谢。

4

0 回答 0