不使用名称的子项的 WPF 动画属性

标签 wpf xaml storyboard element children

我正在尝试在 XAML 中创建一个 Storyboard,它为引发事件的元素的子元素之一的属性设置动画。但是我似乎无法在不使用 Names 的情况下让它工作,这是我在这种特定情况下无法真正做到的。

我基本上是在尝试这样的事情(当然简化了很多):

   <Canvas>
      <Canvas.Triggers>
         <EventTrigger RoutedEvent="FrameworkElement.Loaded">
            <EventTrigger.Actions>
               <BeginStoryboard>
                  <Storyboard>
                     <DoubleAnimation Storyboard.TargetProperty="Children[0].(Canvas.Left)" From="0" To="400" />
                  </Storyboard>
               </BeginStoryboard>
            </EventTrigger.Actions>
         </EventTrigger>
      </Canvas.Triggers>

      <Button Canvas.Left="20" Canvas.Top="20">A</Button>
      <Button Canvas.Left="40" Canvas.Top="20">B</Button>
   </Canvas>

关于如何实现这一目标的任何想法?

最佳答案

前提是UIElement您正在索引动画存在(即已经存在于 Canvas 上),那么您可以执行以下操作:

<Canvas x:Name="MyCanvas">
    <Button x:Name="btn" Canvas.Left="20" Canvas.Top="20">A</Button>
    <Button Canvas.Left="40" Canvas.Top="20">B</Button>
    <Canvas.Triggers>
        <EventTrigger RoutedEvent="FrameworkElement.Loaded">
            <EventTrigger.Actions>
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation Storyboard.Target="{Binding ElementName=MyCanvas, Path=Children[0]}"
                                         Storyboard.TargetProperty="(Canvas.Left)" From="0" To="400" />
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger.Actions>
        </EventTrigger>
    </Canvas.Triggers>
</Canvas>

请注意我是如何将按钮的添加移到 Trigger 上方的。 .如果按钮低于 Trigger就像您的问题一样,尝试访问 Children[0]会抛出 ArgumentOutOfRangeException因为此时没有 child 。

关于不使用名称的子项的 WPF 动画属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17932824/

相关文章:

c# - 在 WPF 应用程序中找不到资源字典

iOS Storyboard - 从 ViewController 到另一个的自定义 socket ?

ios - UITableViewCell 根据所选行转至不同的静态 UITableViewController?

ios - 如何在 Storyboard 中将 View 移动到另一个 View 内

wpf - 数据绑定(bind)在 xaml 中不起作用

c# - 由于未注册 Windows,Windows 10 分配的访问权限应用无法启动。启动契约(Contract)

c# - 如何在 wpf 中使用 Prism 打开新的模态对话框

c# - XAML 找不到命名空间。有时

wpf - 如何绑定(bind)到 ListBox 的视口(viewport)宽度(即没有滚动条的宽度)?

c# - View 订阅 ViewModel 中实例对象的属性